/* C K O N B I -- OS/2-specific NetBios support */ /* COPYRIGHT NOTICE: Copyright (C) 1985, 1994, Trustees of Columbia University in the City of New York. The C-Kermit software may not be, in whole or in part, licensed or sold for profit as a software product itself, nor may it be included in or distributed with commercial products or otherwise distributed by commercial concerns to their clients or customers without written permission of the Office of Kermit Development and Distribution, Columbia University. This copyright notice must not be removed, altered, or obscured. */ /* developed by Jeffrey Altman Supports: Traditional NetBios interface: IBM Lan Adapter and Protocol Support IBM OS/2 Extended Services IBM Communication Manager/2 Newer Netbeui Interface: Microsoft LAN Manager Requester IBM LAN Server Requester Novell Netware Requester */ #ifdef CK_NETBIOS #ifndef CKCMAI #ifndef CKONBI_H #define CKONBI_H /*------------------------------------------------------------------*/ /* TYPE DEFINITIONS FOR DATA DECLARATIONS */ /*------------------------------------------------------------------*/ typedef unsigned char byte; typedef unsigned short word; typedef unsigned long dword; #pragma seg16(address) typedef unsigned char * _Seg16 address; #pragma seg16(HSEM16) typedef void * _Seg16 HSEM16; typedef HSEM16 * PHSEM16; /*----------------------------------------------------------------*/ /* NETBIOS COMMAND CODES */ /*----------------------------------------------------------------*/ #define NB_CALL_WAIT 0x0010 #define NB_LISTEN_WAIT 0x0011 #define NB_HANG_UP_WAIT 0x0012 #define NB_SEND_WAIT 0x0014 #define NB_RECEIVE_WAIT 0x0015 #define NB_RECEIVE_ANY_WAIT 0x0016 #define NB_CHAIN_SEND_WAIT 0x0017 #define NB_SEND_DATAGRAM_WAIT 0x0020 #define NB_RECEIVE_DATAGRAM_WAIT 0x0021 #define NB_SEND_BROADCAST_DATAGRAM_WAIT 0x0022 #define NB_RECEIVE_BROADCAST_DATAGRAM_W 0x0023 #define NB_ADD_NAME_WAIT 0x0030 #define NB_DELETE_NAME_WAIT 0x0031 #define NB_RESET_WAIT 0x0032 #define NB_STATUS_WAIT 0x0033 #define NB_SESSION_STATUS_WAIT 0x0034 #define NB_CANCEL_WAIT 0x0035 #define NB_ADD_GROUP_NAME_WAIT 0x0036 #define NB_UNLINK_WAIT 0x0070 #define NB_SEND_NO_ACK_WAIT 0x0071 #define NB_CHAIN_SEND_NO_ACK_WAIT 0x0072 #define NB_FIND_NAMEWAIT 0x0078 #define NB_CALL 0x0090 #define NB_LISTEN 0x0091 #define NB_HANG_UP 0x0092 #define NB_SEND 0x0094 #define NB_RECEIVE 0x0095 #define NB_RECEIVE_ANY 0x0096 #define NB_CHAIN_SEND 0x0097 #define NB_SEND_DATAGRAM 0x00A0 #define NB_RECEIVE_DATAGRAM 0x00A1 #define NB_SEND_BROADCAST_DATAGRAM 0x00A2 #define NB_RECEIVE_BROADCAST_DATAGRAM 0x00A3 #define NB_ADD_NAME 0x00B0 #define NB_DELETE_NAME 0x00B1 #define NB_STATUS 0x00B3 #define NB_SESSION_STATUS 0x00B4 #define NB_ADD_GROUP_NAME 0x00B6 #define NB_SEND_NO_ACK 0x00F1 #define NB_CHAIN_SEND_NO_ACK 0x00F2 #define NB_LAN_STATUS_ALERT 0x00F3 #define NB_FIND_NAME 0x00F8 #define NB_INVALID_COMMAND_CODE 0x00FF /*----------------------------------------------------------------*/ /* NETBIOS RETURN CODES */ /*----------------------------------------------------------------*/ #define NB_COMMAND_SUCCESSFUL 0x0000 #define NB_ILLEGAL_BUFFER_LEN 0x0001 #define NB_INVALID_COMMAND 0x0003 #define NB_COMMAND_TIME_OUT 0x0005 #define NB_MESSAGE_INCOMPLETE 0x0006 #define NB_DATA_NOT_RECEIVED 0x0007 #define NB_ILLEGAL_LOCAL_SESSION 0x0008 #define NB_NO_RES_AVAILABLE 0x0009 #define NB_SESSION_CLOSED 0x000A #define NB_COMMAND_CANCELLED 0x000B #define NB_DUPLICATE_NAME 0x000D #define NB_NAME_TABLE_FULL 0x000E #define NB_CMND_CMPL_DEREGISTERED 0x000F #define NB_SESSION_TABLE_FULL 0x0011 #define NB_SES_OPEN_REJECTED 0x0012 #define NB_ILLEGAL_NAME_NUMBER 0x0013 #define NB_REMOTE_NAME_NOT_FOUND 0x0014 #define NB_LOCAL_NAME_NOT_FOUND 0x0015 #define NB_NAME_IN_USE 0x0016 #define NB_NAME_DELETED 0x0017 #define NB_SESSION_ENDED_ABNORMALLY 0x0018 #define NB_NAME_CONFLICT 0x0019 #define NB_INTERFACE_BUSY 0x0021 #define NB_MAX_CMNDS_EXCEEDED 0x0022 #define NB_INVALID_ADAPTER 0x0023 #define NB_CMND_ALREADY_COMPLETED 0x0024 #define NB_CMND_INVALID_TO_CANCEL 0x0026 #define NB_NAME_DEFINED_BY_OTHERS 0x0030 #define NB_ENVIRONMENT_NOT_DEFINED 0x0034 #define NB_NO_OS_RESOURCES 0x0035 #define NB_MAX_APPL_EXCEEDED 0x0036 #define NB_NO_SAP_AVAILABLE 0x0037 #define NB_INADEQUATE_RESOURCES 0x0038 #define NB_INVALID_NCB_ADDRESS 0x0039 #define NB_RESET_INVALID 0x003A #define NB_INVALID_DD_ID 0x003B #define NB_SEGMENT_LOCK_UNSUCCESSFUL 0x003C #define NB_DD_OPEN_ERROR 0x003F #define NB_OS_ERROR_DETECTED 0x0040 #define NB_PERM_RING_STATUS 0x004F #define NB_UNEXPECTED_CCB_ERROR 0x00F6 #define NB_ADAPTER_OPEN_ERROR 0x00F8 #define NB_ADAPTER_HANDLER_ERROR 0x00F9 #define NB_ADAPTER_CHECK 0x00FA #define NB_CODE_NOT_OPERATIONAL 0x00FB #define NB_OPEN_FAILURES 0x00FC #define NB_UNEXPECTED_CLOSE 0x00FD #define NB_COMMAND_IN_PROCESS 0x00FF /*------------------------------------------------------------------*/ /* NETBIOS NCB SESSION STATES */ /*------------------------------------------------------------------*/ #define NB_SESSION_STATE_CLOSED 0x0000 #define NB_SESSION_STATE_LISTEN_PENDING 0x0001 #define NB_SESSION_STATE_CALL_PENDING 0x0002 #define NB_SESSION_STATE_SESSION_ACTIVE 0x0003 #define NB_SESSION_STATE_HANGUP_PENDING 0x0004 #define NB_SESSION_STATE_HANGUP_COMPLETE 0x0005 #define NB_SESSION_STATE_SESSION_ABORTED 0x0006 /*------------------------------------------------------------------*/ /* NETBIOS NCB DATA DECLARATIONS */ /*------------------------------------------------------------------*/ struct network_control_block { byte ncb_command; /* Netbios command code */ byte ncb_retcode; /* Return code */ byte ncb_lsn; /* Local session number */ byte ncb_num; /* Number of application name*/ address ncb_buffer_address; /* Address of message buffer */ word ncb_length; /* length of message buffer */ byte ncb_callname[16]; /* Destination name */ byte ncb_name[16]; /* Source name */ byte ncb_rto; /* Receive timeout */ byte ncb_sto; /* Send timeout */ union /* Offset 44 parameters */ { address ncb_post_address; /* Address of post routine */ HSEM16 ncb_post_handle; /* Handle to event semaphore */ struct { word ncb_post_addr_offset; /* Offset of post routine */ word ncb_dd_id; /* Device driver ID */ } DD; } off44; byte ncb_lana_num; /* Adapter number */ byte ncb_cmd_cplt; /* Command status */ byte ncb_reserve[14]; /* Reserved (except RESET) */ }; struct ncb_status_information { byte burned_in_addr[6]; /* Adapter's burned in addr */ byte reserved1[2]; /* RESERVED always X'0000' */ word software_level_number; /* X'FFnn' - nn is level num */ word reporting_period; /* reporting period (minutes)*/ word frmr_frames_received; /* Number of FRMR received */ word frmr_frames_sent; /* Number of FRMR sent */ word bad_iframes_received; /* # bad Iframes received */ word aborted_transmissions; /* # aborted transmits */ dword packets_transmitted; /* # Successfully transmitted*/ dword packets_received; /* # Successfully received */ word bad_iframes_transmitted; /* # bad Iframes transmitted */ word lost_data_count; /* Lost SAP buffer data cnt */ word t1_expiration_count; /* Number of T1 expirations */ word ti_expiration_count; /* Number of Ti expirations */ address extended_status_table; /* Address of extended status*/ word number_of_free_ncbs; /* Number of NCBs available */ word max_configured_ncbs; /* Configured NCB maximum */ word max_allowed_ncbs; /* Maximum NCBs (always 255) */ word busy_condition_count; /* Local station busy count */ word max_datagram_size; /* Maximum datagram packet */ word pending_sessions; /* Number of pending sessions*/ word max_configured_sessions; /* Configured session maximum*/ word max_allowed_sessions; /* Maximum sessions (254) */ word max_data_packet_size; /* Maximum session packet */ word number_of_names_present; /* Number of names in table */ }; struct ncb_extended_status { byte reserved[40]; /* RESERVED */ byte local_adapter_address[6]; /* Adapter's local address */ }; struct ncb_session_status { byte name_number_of_sessions; /* Name number for sessions */ byte sessions_using_name; /* # of sessions using name */ byte active_rcv_datagrams; /* # of receive datagrams out*/ byte active_receive_anys; /* # of RECEIVE.ANY cmnds out*/ byte local_session_number; /* Local session number */ byte session_state; /* State of session */ byte local_name[16]; /* Local name */ byte remote_name[16]; /* Remote name */ byte active_receives; /* # of RECEIVE cmnds out */ byte active_sends; /* # of SEND, CHAIN.SEND out */ }; struct ncb_find_name_info { word nodes_responding; /* Number of nodes responding*/ byte reserved; /* RESERVED */ byte name_status; /* Unique/Group name flag */ }; struct ncb_lan_header_entry { byte lan_entry_length; /* Length of entry */ byte lan_pcf0; /* Physical control field 0 */ byte lan_pcf1; /* Physical control field 1 */ byte lan_destination_addr[6]; /* Destination address */ byte lan_source_addr[6]; /* Source address */ byte lan_routing_info[18]; /* Routing information */ }; struct ncb_chain_send { byte ncb_command; /* Netbios command code */ byte ncb_retcode; /* Return code */ byte ncb_lsn; /* Local session number */ byte not_used1; /* Not used */ address ncb_buffer_address; /* Address of message buffer */ word ncb_length; /* Length of message buffer */ word buffer_two_length; /* Length of second buffer */ address buffer_two_address; /* Address to second buffer */ byte reserved[10]; /* RESERVED */ byte not_used2[18]; /* Not used */ union /* Offset 44 parameters */ { address ncb_post_address; /* Address of post routine */ struct { word ncb_post_addr_offset; /* Offset of post routine */ word ncb_dd_id; /* Device driver ID */ } DD; } off44 ; byte ncb_lana_num; /* Adapter number */ byte ncb_cmd_cplt; /* Command status */ byte ncb_reserve[14]; /* Reserved */ }; struct ncb_reset { byte ncb_command; /* Netbios command code */ byte ncb_retcode; /* Return code */ byte ncb_lsn; /* Local session number */ byte ncb_num; /* Number of application name*/ address dd_name_address; /* Device drive name address */ byte not_used1[2]; /* Not used */ byte req_sessions; /* # of sessions requested */ byte req_commands; /* # of commands requested */ byte req_names; /* # of names requested */ byte req_name_one; /* Name number one request */ byte not_used2[12]; /* Not used */ byte act_sessions; /* # of sessions obtained */ byte act_commands; /* # of commands obtained */ byte act_names; /* # of names obtained */ byte act_name_one; /* Name number one response */ byte not_used3[4]; /* Not used */ byte load_session; /* Number of sessions at load*/ byte load_commands; /* Number of commands at load*/ byte load_names; /* Number of names at load */ byte load_stations; /* Number of stations at load*/ byte not_used4[2]; /* Not used */ byte load_remote_names; /* Number of remote names */ byte not_used5[5]; /* Not used */ word ncb_dd_id; /* NCB device driver ID */ byte ncb_lana_num; /* Adapter number */ byte not_used6; /* Not used */ byte ncb_reserve[14]; /* NCB error information */ }; /*------------------------------------------------------------------*/ /* NETBIOS TRACE DATA DECLARATIONS */ /*------------------------------------------------------------------*/ struct ncb_entry_header { byte trace_adapter_number; /* Adapter number for trace */ byte trace_environment_id; /* Trace environment ID */ byte trace_type; /* Trace type */ byte trace_modifier; /* Trace modifier */ byte reserved[4]; /* RESERVED */ }; struct ncb_trace_ncb { struct ncb_entry_header common; /* Trace entry header */ byte byte_preceding_ncb; /* Byte preceding NCB */ byte byte_following_ncb; /* Byte following NCB */ address post_address; /* Address of post routine */ address data_address; /* Address of data */ byte data_sample[16]; /* Sample of data at address */ }; struct ncb_trace_status { struct ncb_entry_header common; /* Trace entry header */ word ds_register; /* DS register contents */ word ss_register; /* SS register contents */ word sp_register; /* SP register contents */ address data_address; /* Address of data */ }; struct ncb_trace_ring_status { struct ncb_trace_status common; /* Trace entry header */ word ring_status; /* Ring status */ }; struct ncb_system_action { struct ncb_trace_status common; /* Trace entry header */ byte system_action_id; /* System action ID */ byte sap_value; /* SAP value affected */ }; struct ncb_trace_pc_error { struct ncb_trace_status common; /* Trace entry header */ word error_code; /* PC-Detected error code */ }; struct ncb_trace_adapter_status { struct ncb_trace_status common; /* Trace entry header */ word status_code; /* Adapter Check reason code */ }; struct ncb_trace_dlc_status { struct ncb_trace_status common; /* Trace entry header */ word station_id; /* Station ID */ word dlc_status; /* DLC Status code */ byte frmr_data[5]; /* FRMR data */ byte access_priority; /* Access priority */ byte remote_node_addr[6]; /* Remote node address */ }; struct ncb_trace_return_code { struct ncb_trace_status common; /* Trace entry header */ byte msg_header_xmit[16]; /* Message header transmitted*/ }; struct ncb_trace_receive { struct ncb_trace_status common; /* Trace entry header */ byte msg_header_rcv[16]; /* Message header received */ }; struct ncb_trace_ccb { struct ncb_trace_status common; /* Trace entry header */ byte ccb_data[16]; /* CCB data structure */ }; extern unsigned NETBIOS (char *); #pragma linkage(NETBIOS, far16 pascal) union ncb_types { struct fncb { struct network_control_block bncb; HSEM16 ncb_semaphore; } basic_ncb; struct ncb_chain_send send; struct ncb_reset reset; }; /**************************************************************** * * * Begin NETBEUI declarations and constants * * * ****************************************************************/ #define DEVLEN 8 #define NETBIOS_NAME_LEN 16 typedef struct netbios_info_0 { char nb0_net_name[NETBIOS_NAME_LEN+1]; } NETINFO0, *PNETINFO0; /* netbios_info_0 */ typedef struct netbios_info_1 { char nb1_net_name[NETBIOS_NAME_LEN+1]; char nb1_driver_name[DEVLEN+1];/* OS/2 device driver name */ unsigned char nb1_lana_num; /* LAN adapter number of this net */ char nb1_pad_1; unsigned short nb1_driver_type; unsigned short nb1_net_status; unsigned long nb1_net_bandwidth; /* Network bandwidth, bits/second */ unsigned short nb1_max_sess; /* Max number of sessions */ unsigned short nb1_max_ncbs; /* Max number of outstanding NCBs */ unsigned short nb1_max_names; /* Max number of names */ } NETINFO1, *PNETINFO1; /* netbios_info_1 */ /**************************************************************** * * * Special values and constants * * * ****************************************************************/ /* * Driver types (nb1_driver_type). */ #define NB_TYPE_NCB 1 #define NB_TYPE_MCB 2 /* * Bits defined in nb1_net_status. */ #define NB_LAN_FLAGS_MASK 0x3FFF /* Mask for LAN Flags */ #define NB_LAN_MANAGED 0x0001 /* LAN is managed by redirector */ #define NB_LAN_LOOPBACK 0x0002 /* LAN is a loopback driver */ #define NB_LAN_SENDNOACK 0x0004 /* LAN allows SendNoAck NCBs */ #define NB_LAN_LMEXT 0x0008 /* LAN supports LAN Manager extended NCBs */ #define NB_LAN_INTNCB 0x0010 /* LAN allows NCB submission at */ /* interrupt time (from NCBDone) */ #define NB_LAN_NORESET 0x0040 #define NB_OPEN_MODE_MASK 0xC000 /* Mask for NetBios Open Modes */ #define NB_OPEN_REGULAR 0x4000 /* NetBios opened in Regular mode */ #define NB_OPEN_PRIVILEGED 0x8000 /* NetBios opened in Privileged mode */ #define NB_OPEN_EXCLUSIVE 0xC000 /* NetBios opened in Exclusive mode */ /* * Open modes for NetBiosOpen. */ #define NB_REGULAR 1 #define NB_PRIVILEGED 2 #define NB_EXCLUSIVE 3 #define NCBSIZE sizeof(union ncb_types) #define BNCBSIZE sizeof(struct network_control_block) typedef union ncb_types NCB; typedef union ncb_types * PNCB, * _Seg16 PNCB16 ; typedef struct ncb_status_information STATUSINFO, *PSTATUSINFO; typedef struct ncb_session_status SESSIONINFO, *PSESSIONINFO; typedef struct ncb_find_name FINDNAMEINFO, *PFINDNAMEINFO; typedef struct pbuf2 { USHORT Length; PBYTE Buffer; } *PBuf2; USHORT NCBAddGroupName(BOOL Netbeui, PNCB Ncb,USHORT lana,PBYTE name); USHORT NCBAddName(BOOL Netbeui, PNCB Ncb,USHORT lana,PBYTE name); USHORT NCBCall(BOOL Netbeui, PNCB Ncb,USHORT lana,PBYTE lclname, PBYTE rmtname,USHORT recv_timeout,USHORT send_timeout,BOOL wait); USHORT NCBCancel(BOOL Netbeui, PNCB Ncb,USHORT lana,PNCB NcbToCancel); USHORT NCBChainSend(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn, PBYTE message,USHORT length,PBYTE Buffer2, USHORT Length2,BOOL wait); USHORT NCBChainSendNoAck(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn, PBYTE message,USHORT length,PBYTE Buffer2, USHORT Length2,BOOL wait); USHORT NCBClose(BOOL Netbeui, PNCB Ncb,USHORT lana); USHORT NCBConfig(BOOL Netbeui, PNCB Ncb,USHORT lana,PUSHORT sessions, PUSHORT commands,PUSHORT names); USHORT NCBDeleteName(BOOL Netbeui, PNCB Ncb,USHORT lana,PBYTE lclname); USHORT NCBHangup(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn); USHORT NCBListen(BOOL Netbeui, PNCB Ncb,USHORT lana,PBYTE lclname, PBYTE rmtname,USHORT recv_timeout,USHORT send_timeout,BOOL wait); USHORT NCBReceive(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn,PBYTE buffer, USHORT length,BOOL wait); USHORT NCBReceiveAny(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn, PBYTE buffer,USHORT length,BOOL wait); USHORT NCBReceiveBroadcast(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn, PBYTE buffer,USHORT length,BOOL wait); USHORT NCBReceiveDatagram(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn, PBYTE buffer,USHORT length,BOOL wait); USHORT NCBReset(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT sessions, USHORT commands,USHORT names); USHORT NCBSend(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn,PBYTE message, USHORT length,BOOL wait); USHORT NCBSendBroadcast(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn, PBYTE message,USHORT length,BOOL wait); USHORT NCBSendDatagram(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn, PBYTE rmtname,PBYTE message,USHORT length,BOOL wait); USHORT NCBSendNoAck(BOOL Netbeui, PNCB Ncb,USHORT lana,USHORT lsn, PBYTE message,USHORT length,BOOL wait); USHORT NCBStatus(BOOL Netbeui, PNCB Ncb, USHORT lana, PBYTE callname, PSTATUSINFO pInfo, word length, BOOL wait ); USHORT NCBSessionStatus(BOOL Netbeui, PNCB Ncb, USHORT lana, PBYTE lclname, PSESSIONINFO pInfo, word length, BOOL wait ); USHORT NCBFindName( BOOL Netbeui, PNCB Ncb, USHORT lana, PFINDNAMEINFO pInfo, USHORT length, BOOL wait ) ; USHORT netbios_avail(BOOL Netbeui); USHORT loadapi(PSZ module, PSZ proc, PFN FAR *addr); #define NB_ADAPTERS 4 /* number of virtual adapters */ #define NB_LSN 2 /* number of NetBios sessions */ #define NB_NCB MAXWS+3 /* number of outstanding NCBs */ #define NB_NAMES 2 /* number of names */ #define NB_RECV_TIMEOUT 0 /* seconds */ #define NB_SEND_TIMEOUT 0 /* seconds */ extern BOOL NetbeuiAPI ; extern USHORT netbiosAvail ; _PROTOTYP( void os2_netbiosinit, (void) ) ; _PROTOTYP( void os2_netbioscleanup,(void) ) ; /* Declarations of 16-bit Semaphore interface */ APIRET16 APIENTRY16 Dos16CreateSem( USHORT, PHSEM16, PSZ ) ; APIRET16 APIENTRY16 Dos16SemWait( HSEM16, LONG ) ; APIRET16 APIENTRY16 Dos16SemSet( HSEM16 ) ; APIRET16 APIENTRY16 Dos16SemClear( HSEM16 ) ; APIRET16 APIENTRY16 Dos16CloseSem( HSEM16 ) ; #endif /* CKONBI_H */ #endif /* CKCMAI */ #endif /* CK_NETBIOS */