| 587 |
struct _SSHPacketHandlerItem { |
struct _SSHPacketHandlerItem { |
| 588 |
SSHPacketHandler handler; |
SSHPacketHandler handler; |
| 589 |
/* Circular list of handlers for given message */ |
/* Circular list of handlers for given message */ |
| 590 |
SSHPacketHandlerItem FAR * next_for_message; |
SSHPacketHandlerItem *next_for_message; |
| 591 |
SSHPacketHandlerItem FAR * last_for_message; |
SSHPacketHandlerItem *last_for_message; |
| 592 |
/* Circular list of handlers in set */ |
/* Circular list of handlers in set */ |
| 593 |
SSHPacketHandlerItem FAR * next_in_set; |
SSHPacketHandlerItem *next_in_set; |
| 594 |
int active_for_message; |
int active_for_message; |
| 595 |
}; |
}; |
| 596 |
|
|
| 597 |
typedef struct { |
typedef struct { |
| 598 |
char FAR * hostname; |
char *hostname; |
| 599 |
|
|
| 600 |
int server_protocol_flags; |
int server_protocol_flags; |
| 601 |
char FAR * server_ID; |
char *server_ID; |
| 602 |
|
|
| 603 |
/* This buffer is used to hold the outgoing data, and encrypted in-place |
/* This buffer is used to hold the outgoing data, and encrypted in-place |
| 604 |
here if necessary. */ |
here if necessary. */ |
| 605 |
unsigned char FAR * outbuf; |
unsigned char *outbuf; |
| 606 |
long outbuflen; |
long outbuflen; |
| 607 |
/* This buffer is used by the SSH protocol processing to store uncompressed |
/* This buffer is used by the SSH protocol processing to store uncompressed |
| 608 |
packet data for compression. User data is never streamed through here; |
packet data for compression. User data is never streamed through here; |
| 609 |
it is compressed directly from the user's buffer. */ |
it is compressed directly from the user's buffer. */ |
| 610 |
unsigned char FAR * precompress_outbuf; |
unsigned char *precompress_outbuf; |
| 611 |
long precompress_outbuflen; |
long precompress_outbuflen; |
| 612 |
/* this is the length of the packet data, including the type header */ |
/* this is the length of the packet data, including the type header */ |
| 613 |
long outgoing_packet_len; |
long outgoing_packet_len; |
| 615 |
/* This buffer is used by the SSH protocol processing to store decompressed |
/* This buffer is used by the SSH protocol processing to store decompressed |
| 616 |
packet data. User data is never streamed through here; it is decompressed |
packet data. User data is never streamed through here; it is decompressed |
| 617 |
directly to the user's buffer. */ |
directly to the user's buffer. */ |
| 618 |
unsigned char FAR * postdecompress_inbuf; |
unsigned char *postdecompress_inbuf; |
| 619 |
long postdecompress_inbuflen; |
long postdecompress_inbuflen; |
| 620 |
|
|
| 621 |
unsigned char FAR * payload; |
unsigned char *payload; |
| 622 |
long payload_grabbed; |
long payload_grabbed; |
| 623 |
long payloadlen; |
long payloadlen; |
| 624 |
long payload_datastart; |
long payload_datastart; |
| 633 |
BOOL decompressing; |
BOOL decompressing; |
| 634 |
int compression_level; |
int compression_level; |
| 635 |
|
|
| 636 |
SSHPacketHandlerItem FAR * packet_handlers[256]; |
SSHPacketHandlerItem *packet_handlers[256]; |
| 637 |
int status_flags; |
int status_flags; |
| 638 |
|
|
| 639 |
int win_cols; |
int win_cols; |
| 651 |
|
|
| 652 |
void SSH_init(PTInstVar pvar); |
void SSH_init(PTInstVar pvar); |
| 653 |
void SSH_open(PTInstVar pvar); |
void SSH_open(PTInstVar pvar); |
| 654 |
void SSH_notify_disconnecting(PTInstVar pvar, char FAR * reason); |
void SSH_notify_disconnecting(PTInstVar pvar, char *reason); |
| 655 |
/* SSH_handle_server_ID returns TRUE iff a valid ID string has been |
/* SSH_handle_server_ID returns TRUE iff a valid ID string has been |
| 656 |
received. If it returns FALSE, we need to keep looking for another |
received. If it returns FALSE, we need to keep looking for another |
| 657 |
ID string. */ |
ID string. */ |
| 658 |
BOOL SSH_handle_server_ID(PTInstVar pvar, char FAR * ID, int ID_len); |
BOOL SSH_handle_server_ID(PTInstVar pvar, char *ID, int ID_len); |
| 659 |
/* SSH_handle_packet requires NO PAYLOAD on entry. |
/* SSH_handle_packet requires NO PAYLOAD on entry. |
| 660 |
'len' is the size of the packet: payload + padding (+ CRC for SSHv1) |
'len' is the size of the packet: payload + padding (+ CRC for SSHv1) |
| 661 |
'padding' is the size of the padding. |
'padding' is the size of the padding. |
| 662 |
'data' points to the start of the packet data (the length field) |
'data' points to the start of the packet data (the length field) |
| 663 |
*/ |
*/ |
| 664 |
void SSH_handle_packet(PTInstVar pvar, char FAR * data, int len, int padding); |
void SSH_handle_packet(PTInstVar pvar, char *data, int len, int padding); |
| 665 |
void SSH_notify_win_size(PTInstVar pvar, int cols, int rows); |
void SSH_notify_win_size(PTInstVar pvar, int cols, int rows); |
| 666 |
void SSH_notify_user_name(PTInstVar pvar); |
void SSH_notify_user_name(PTInstVar pvar); |
| 667 |
void SSH_notify_cred(PTInstVar pvar); |
void SSH_notify_cred(PTInstVar pvar); |
| 668 |
void SSH_notify_host_OK(PTInstVar pvar); |
void SSH_notify_host_OK(PTInstVar pvar); |
| 669 |
void SSH_send(PTInstVar pvar, unsigned char const FAR * buf, unsigned int buflen); |
void SSH_send(PTInstVar pvar, unsigned char const *buf, unsigned int buflen); |
| 670 |
/* SSH_extract_payload returns number of bytes extracted */ |
/* SSH_extract_payload returns number of bytes extracted */ |
| 671 |
int SSH_extract_payload(PTInstVar pvar, unsigned char FAR * dest, int len); |
int SSH_extract_payload(PTInstVar pvar, unsigned char *dest, int len); |
| 672 |
void SSH_end(PTInstVar pvar); |
void SSH_end(PTInstVar pvar); |
| 673 |
|
|
| 674 |
void SSH_get_server_ID_info(PTInstVar pvar, char FAR * dest, int len); |
void SSH_get_server_ID_info(PTInstVar pvar, char *dest, int len); |
| 675 |
void SSH_get_protocol_version_info(PTInstVar pvar, char FAR * dest, int len); |
void SSH_get_protocol_version_info(PTInstVar pvar, char *dest, int len); |
| 676 |
void SSH_get_compression_info(PTInstVar pvar, char FAR * dest, int len); |
void SSH_get_compression_info(PTInstVar pvar, char *dest, int len); |
| 677 |
void SSH_get_mac_info(PTInstVar pvar, char FAR * dest, int len); |
void SSH_get_mac_info(PTInstVar pvar, char *dest, int len); |
| 678 |
|
|
| 679 |
/* len must be <= SSH_MAX_SEND_PACKET_SIZE */ |
/* len must be <= SSH_MAX_SEND_PACKET_SIZE */ |
| 680 |
void SSH_channel_send(PTInstVar pvar, int channel_num, |
void SSH_channel_send(PTInstVar pvar, int channel_num, |
| 681 |
uint32 remote_channel_num, |
uint32 remote_channel_num, |
| 682 |
unsigned char FAR * buf, int len, int retry); |
unsigned char *buf, int len, int retry); |
| 683 |
void SSH_fail_channel_open(PTInstVar pvar, uint32 remote_channel_num); |
void SSH_fail_channel_open(PTInstVar pvar, uint32 remote_channel_num); |
| 684 |
void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num); |
void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num); |
| 685 |
void SSH_channel_output_eof(PTInstVar pvar, uint32 remote_channel_num); |
void SSH_channel_output_eof(PTInstVar pvar, uint32 remote_channel_num); |
| 686 |
void SSH_channel_input_eof(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num); |
void SSH_channel_input_eof(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num); |
| 687 |
void SSH_request_forwarding(PTInstVar pvar, char FAR * bind_address, int from_server_port, |
void SSH_request_forwarding(PTInstVar pvar, char *bind_address, int from_server_port, |
| 688 |
char FAR * to_local_host, int to_local_port); |
char *to_local_host, int to_local_port); |
| 689 |
void SSH_cancel_request_forwarding(PTInstVar pvar, char FAR * bind_address, int from_server_port, int reply); |
void SSH_cancel_request_forwarding(PTInstVar pvar, char *bind_address, int from_server_port, int reply); |
| 690 |
void SSH_request_X11_forwarding(PTInstVar pvar, |
void SSH_request_X11_forwarding(PTInstVar pvar, |
| 691 |
char FAR * auth_protocol, unsigned char FAR * auth_data, int auth_data_len, int screen_num); |
char *auth_protocol, unsigned char *auth_data, int auth_data_len, int screen_num); |
| 692 |
void SSH_open_channel(PTInstVar pvar, uint32 local_channel_num, |
void SSH_open_channel(PTInstVar pvar, uint32 local_channel_num, |
| 693 |
char FAR * to_remote_host, int to_remote_port, |
char *to_remote_host, int to_remote_port, |
| 694 |
char FAR * originator, unsigned short originator_port); |
char *originator, unsigned short originator_port); |
| 695 |
|
|
| 696 |
int SSH_start_scp(PTInstVar pvar, char *sendfile, char *dstfile); |
int SSH_start_scp(PTInstVar pvar, char *sendfile, char *dstfile); |
| 697 |
int SSH_start_scp_receive(PTInstVar pvar, char *filename); |
int SSH_start_scp_receive(PTInstVar pvar, char *filename); |
| 702 |
int SSH_get_min_packet_size(PTInstVar pvar); |
int SSH_get_min_packet_size(PTInstVar pvar); |
| 703 |
/* data is guaranteed to be at least SSH_get_min_packet_size bytes long |
/* data is guaranteed to be at least SSH_get_min_packet_size bytes long |
| 704 |
at least 5 bytes must be decrypted */ |
at least 5 bytes must be decrypted */ |
| 705 |
void SSH_predecrpyt_packet(PTInstVar pvar, char FAR * data); |
void SSH_predecrpyt_packet(PTInstVar pvar, char *data); |
| 706 |
int SSH_get_clear_MAC_size(PTInstVar pvar); |
int SSH_get_clear_MAC_size(PTInstVar pvar); |
| 707 |
|
|
| 708 |
#define SSH_is_any_payload(pvar) ((pvar)->ssh_state.payload_datalen > 0) |
#define SSH_is_any_payload(pvar) ((pvar)->ssh_state.payload_datalen > 0) |
| 822 |
unsigned int state; |
unsigned int state; |
| 823 |
} Channel_t; |
} Channel_t; |
| 824 |
|
|
| 825 |
unsigned char FAR *begin_send_packet(PTInstVar pvar, int type, int len); |
unsigned char *begin_send_packet(PTInstVar pvar, int type, int len); |
| 826 |
void finish_send_packet_special(PTInstVar pvar, int skip_compress); |
void finish_send_packet_special(PTInstVar pvar, int skip_compress); |
| 827 |
void SSH2_send_channel_data(PTInstVar pvar, Channel_t *c, unsigned char FAR * buf, unsigned int buflen, int retry); |
void SSH2_send_channel_data(PTInstVar pvar, Channel_t *c, unsigned char *buf, unsigned int buflen, int retry); |
| 828 |
|
|
| 829 |
#define finish_send_packet(pvar) finish_send_packet_special((pvar), 0) |
#define finish_send_packet(pvar) finish_send_packet_special((pvar), 0) |
| 830 |
#define get_payload_uint32(pvar, offset) get_uint32_MSBfirst((pvar)->ssh_state.payload + (offset)) |
#define get_payload_uint32(pvar, offset) get_uint32_MSBfirst((pvar)->ssh_state.payload + (offset)) |