mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
9.8 KiB
258 lines
9.8 KiB
/********************************************************************
|
|
** Microsoft OS/2 LAN Manager **
|
|
** Copyright(c) Microsoft Corp., 1987, 1988 **
|
|
********************************************************************/
|
|
|
|
/********************************************************************
|
|
* *
|
|
* About this file ... NCB.H *
|
|
* *
|
|
* This file contains information about NCBs. Use this file *
|
|
* in conjunction with NETBIOS.H and the NetBios APIs wo write *
|
|
* programs that interact with the network via the NetBIOS *
|
|
* protocol.
|
|
* *
|
|
* *
|
|
* NOTE: You must include NETCONS.H before this file, since this *
|
|
* file depends on values defined in NETCONS.H. *
|
|
* *
|
|
********************************************************************/
|
|
|
|
|
|
/****************************************************************
|
|
* *
|
|
* Data structure templates *
|
|
* *
|
|
****************************************************************/
|
|
|
|
|
|
/**INTERNAL_ONLY**/
|
|
/* NOTE: NCBNAMSZ is defined for backward compatibility, but programs
|
|
* should be using NETBIOS_NAME_LEN (which is defined in NETCONS.H).
|
|
*/
|
|
/**END_INTERNAL**/
|
|
#define NCBNAMSZ NETBIOS_NAME_LEN /* absolute length of a net name */
|
|
|
|
/*
|
|
* Network Control Block
|
|
*/
|
|
|
|
/**INTERNAL_ONLY**/
|
|
/* BUGBUG: We enclose the entire structure in the #ifdef because
|
|
* this file is translated to a .INC file and the current
|
|
* build version of MASM doesn't support #ifdef in structures.
|
|
* When we move to a upgrade of MASM which does, this file
|
|
* should be modified so that only the last 14 bytes of the
|
|
* structure are #ifdef'd.
|
|
*
|
|
* -- DannyGl, 1 March 1989
|
|
*/
|
|
#ifndef SRVNCB
|
|
/**END_INTERNAL**/
|
|
struct ncb {
|
|
unsigned char ncb_command; /* command code */
|
|
unsigned char ncb_retcode; /* return code */
|
|
unsigned char ncb_lsn; /* local session number */
|
|
unsigned char ncb_num; /* number of our network name */
|
|
char far * ncb_buffer; /* address of message buffer */
|
|
unsigned short ncb_length; /* size of message buffer */
|
|
char ncb_callname[NCBNAMSZ]; /* blank-padded name of remote */
|
|
char ncb_name[NCBNAMSZ]; /* our blank-padded netname */
|
|
unsigned char ncb_rto; /* rcv timeout/retry count */
|
|
unsigned char ncb_sto; /* send timeout/sys timeout */
|
|
unsigned long ncb_post; /* Async notification handle */
|
|
unsigned char ncb_lana_num; /* lana (adapter) number */
|
|
unsigned char ncb_cmd_cplt; /* 0xff => commmand pending */
|
|
unsigned char ncb_reserve[14]; /* reserved, used by BIOS */
|
|
}; /* ncb */
|
|
/**INTERNAL_ONLY**/
|
|
#else
|
|
struct ncb {
|
|
unsigned char ncb_command; /* command code */
|
|
unsigned char ncb_retcode; /* return code */
|
|
unsigned char ncb_lsn; /* local session number */
|
|
unsigned char ncb_num; /* number of our network name */
|
|
char far * ncb_buffer; /* address of message buffer */
|
|
unsigned short ncb_length; /* size of message buffer */
|
|
char ncb_callname[NCBNAMSZ]; /* blank-padded name of remote */
|
|
char ncb_name[NCBNAMSZ]; /* our blank-padded netname */
|
|
unsigned char ncb_rto; /* rcv timeout/retry count */
|
|
unsigned char ncb_sto; /* send timeout/sys timeout */
|
|
unsigned long ncb_post; /* Async notification handle */
|
|
unsigned char ncb_lana_num; /* lana (adapter) number */
|
|
unsigned char ncb_cmd_cplt; /* 0xff => commmand pending */
|
|
char ncb_cmdx; /* smb cmd to process */
|
|
char ncb_chardevix; /* = 0xFF if this nb did not come */
|
|
/* from a char dev queue else is */
|
|
/* index to char dev to open */
|
|
unsigned char ncb_serialnum; /* session serial number */
|
|
unsigned char ncb_seqnum; /* session sequence number */
|
|
unsigned short ncb_smbmid; /* smb_mid value for TRANS2 */
|
|
unsigned short ncb_smbtid; /* the TID for this NB */
|
|
unsigned short ncb_smbparams; /* offset of ptr to params of next */
|
|
/* smb to process in buffer */
|
|
long ncb_timestamp; /* time we began processing this nb */
|
|
}; /* ncb */
|
|
#endif /* SRVNCB */
|
|
/**END_INTERNAL**/
|
|
|
|
typedef struct ncb NCB;
|
|
|
|
/****************************************************************
|
|
* *
|
|
* Special values and constants *
|
|
* *
|
|
****************************************************************/
|
|
|
|
/*
|
|
* NCB Command codes
|
|
*/
|
|
|
|
#define NCBCALL 0x10 /* NCB CALL */
|
|
#define NCBLISTEN 0x11 /* NCB LISTEN */
|
|
#define NCBHANGUP 0x12 /* NCB HANG UP */
|
|
#define NCBSEND 0x14 /* NCB SEND */
|
|
#define NCBRECV 0x15 /* NCB RECEIVE */
|
|
#define NCBRECVANY 0x16 /* NCB RECEIVE ANY */
|
|
#define NCBCHAINSEND 0x17 /* NCB CHAIN SEND */
|
|
#define NCBDGSEND 0x20 /* NCB SEND DATAGRAM */
|
|
#define NCBDGRECV 0x21 /* NCB RECEIVE DATAGRAM */
|
|
#define NCBDGSENDBC 0x22 /* NCB SEND BROADCAST DATAGRAM */
|
|
#define NCBDGRECVBC 0x23 /* NCB RECEIVE BROADCAST DATAGRAM */
|
|
#define NCBADDNAME 0x30 /* NCB ADD NAME */
|
|
#define NCBDELNAME 0x31 /* NCB DELETE NAME */
|
|
#define NCBRESET 0x32 /* NCB RESET */
|
|
#define NCBASTAT 0x33 /* NCB ADAPTER STATUS */
|
|
#define NCBSSTAT 0x34 /* NCB SESSION STATUS */
|
|
#define NCBCANCEL 0x35 /* NCB CANCEL */
|
|
#define NCBADDGRNAME 0x36 /* NCB ADD GROUP NAME */
|
|
#define NCBGATHERSEND 0x40 /* NCB GATHER SEND */
|
|
#define NCBSCATTERRCV 0x41 /* NCB SCATTER RECEIVE */
|
|
#define NCBSEND_RCVANY 0x48 /* NCB TRANCEIVE */
|
|
#define NCBUNLINK 0x70 /* NCB UNLINK */
|
|
#define NCBSENDNA 0x71 /* NCB SEND NO ACK */
|
|
#define NCBCHAINSENDNA 0x72 /* NCB CHAIN SEND NO ACK */
|
|
|
|
|
|
#define NCBCALLNIU 0x74 /* UB special */
|
|
#define NCBRCVPKT 0x78 /* UB special */
|
|
|
|
#define ASYNCH 0x80 /* high bit set == asynchronous */
|
|
|
|
/*
|
|
* NCB Return codes
|
|
*/
|
|
|
|
#define NRC_GOODRET 0x00 /* good return */
|
|
#define NRC_BUFLEN 0x01 /* illegal buffer length */
|
|
#define NRC_BFULL 0x02 /* buffers full, no receive issued */
|
|
#define NRC_ILLCMD 0x03 /* illegal command */
|
|
#define NRC_CMDTMO 0x05 /* command timed out */
|
|
#define NRC_INCOMP 0x06 /* message incomplete, issue another command */
|
|
#define NRC_BADDR 0x07 /* illegal buffer address */
|
|
#define NRC_SNUMOUT 0x08 /* session number out of range */
|
|
#define NRC_NORES 0x09 /* no resource available */
|
|
#define NRC_SCLOSED 0x0a /* session closed */
|
|
#define NRC_CMDCAN 0x0b /* command canceled */
|
|
#define NRC_DMAFAIL 0x0c /* PC DMA failed */
|
|
#define NRC_DUPNAME 0x0d /* duplicate name */
|
|
#define NRC_NAMTFUL 0x0e /* name table full */
|
|
#define NRC_ACTSES 0x0f /* no deletions, name has active sessions */
|
|
#define NRC_INVALID 0x10 /* name not found or no valid name */
|
|
#define NRC_LOCTFUL 0x11 /* local session table full */
|
|
#define NRC_REMTFUL 0x12 /* remote session table full */
|
|
#define NRC_ILLNN 0x13 /* illegal name number */
|
|
#define NRC_NOCALL 0x14 /* no callname */
|
|
#define NRC_NOWILD 0x15 /* cannot put * in NCB_NAME */
|
|
#define NRC_INUSE 0x16 /* name in use on remote adapter */
|
|
#define NRC_NAMERR 0x17 /* called name cannot == name nor name # */
|
|
#define NRC_SABORT 0x18 /* session ended abnormally */
|
|
#define NRC_NAMCONF 0x19 /* name conflict detected */
|
|
#define NRC_IFBUSY 0x21 /* interface busy, IRET before retrying */
|
|
#define NRC_TOOMANY 0x22 /* too many commands outstanding, retry later*/
|
|
#define NRC_BRIDGE 0x23 /* ncb_bridge field not 00 or 01 */
|
|
#define NRC_CANOCCR 0x24 /* command completed while cancel occuring */
|
|
#define NRC_RESNAME 0x25 /* reserved name specified */
|
|
#define NRC_CANCEL 0x26 /* command not valid to cancel */
|
|
#define NRC_MULT 0x33 /* multiple requests for same session */
|
|
#define NRC_MAXAPPS 0x36 /* max number of applications exceeded */
|
|
#define NRC_NORESOURCES 0x38 /* requested resources are not available */
|
|
#define NRC_SYSTEM 0x40 /* system error */
|
|
#define NRC_ROM 0x41 /* ROM checksum failure */
|
|
#define NRC_RAM 0x42 /* RAM test failure */
|
|
#define NRC_DLF 0x43 /* digital loopback failure */
|
|
#define NRC_ALF 0x44 /* analog loopback failure */
|
|
#define NRC_IFAIL 0x45 /* interface failure */
|
|
#define NRC_ADPTMALFN 0x50 /* network adapter malfunction */
|
|
|
|
#define NRC_PENDING 0xff /* asynchronous command is not yet finished */
|
|
|
|
/*NOINC*/
|
|
/* main user entry point for NetBios 3.0*/
|
|
API_RET_TYPE far pascal
|
|
NetBios(struct ncb far *);
|
|
/*INC*/
|
|
|
|
/*
|
|
* Maximum datagram size
|
|
*/
|
|
|
|
#define MAX_DG_SIZE 512
|
|
/*NOINC*/
|
|
/**INTERNAL_ONLY**/
|
|
|
|
/*
|
|
* S_TO_N()
|
|
* Convert a C string to an NCB name.
|
|
* String will be truncated if too long.
|
|
*
|
|
* ENTRY
|
|
* cs - points to C string
|
|
* EXIT
|
|
* nm - contains "cs", converted to NCB format
|
|
*
|
|
* Copy string up to terminating NUL, then pad with blanks.
|
|
*/
|
|
#define S_TO_N(cs, nm) \
|
|
{ \
|
|
int i; \
|
|
for (i=0 ; i < NCBNAMSZ ; (nm)[i] = (cs)[i], i++) \
|
|
if ((cs)[i] == '\0') \
|
|
break; \
|
|
while (i < NCBNAMSZ) \
|
|
(nm)[i++] = ' '; \
|
|
}
|
|
|
|
|
|
/*
|
|
* N_TO_S()
|
|
* Convert an NCB name to a C string.
|
|
* (Complement of ston().)
|
|
*
|
|
* ENTRY
|
|
* nm - points to the NCB name
|
|
* cs - points to a block of memory at least NCBNAMSZ+1 bytes
|
|
* EXIT
|
|
* cs - points to an unpadded ASCIZ equivalent of "nm"
|
|
*
|
|
* End the C string with a NUL;
|
|
* Strip trailing blanks;
|
|
* Copy name into string.
|
|
*/
|
|
#define N_TO_S(nm, cs) \
|
|
{ \
|
|
int i = NCBNAMSZ; \
|
|
(cs)[i] = '\0'; \
|
|
while (--i >= 0) { \
|
|
if ((nm)[i] != ' ') \
|
|
break; \
|
|
(cs)[i] = '\0'; \
|
|
} \
|
|
while (i >= 0) { \
|
|
(cs)[i] = (nm)[i]; \
|
|
i--; \
|
|
} \
|
|
}
|
|
|
|
/**END_INTERNAL**/
|
|
/*INC*/
|