Source code of Windows XP (NT5)
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.

323 lines
14 KiB

  1. /****************************************************************************
  2. * (c) Copyright 1993 Micro Computer Systems, Inc. All rights reserved.
  3. *****************************************************************************
  4. *
  5. * Title: IPX/SPX WinSock Helper DLL for Windows NT
  6. *
  7. * Module: ipx/sockhelp/wshnwlnk.c
  8. *
  9. * Version: 1.00.00
  10. *
  11. * Date: 04-08-93
  12. *
  13. * Author: Brian Walker
  14. *
  15. *****************************************************************************
  16. *
  17. * Change Log:
  18. *
  19. * Date DevSFC Comment
  20. * -------- ------ -------------------------------------------------------
  21. *
  22. *****************************************************************************
  23. *
  24. * Functional Description:
  25. *
  26. ****************************************************************************/
  27. #include <nt.h>
  28. #include <ntrtl.h>
  29. #include <nturtl.h>
  30. #include <windef.h>
  31. #include <winbase.h>
  32. #include <tdi.h>
  33. #include <winsock.h>
  34. #include <wsahelp.h>
  35. #include <wsipx.h>
  36. #include <wsnwlink.h>
  37. /*page****************************************************************
  38. These are the triples we support.
  39. *********************************************************************/
  40. typedef struct _MAPPING_TRIPLE {
  41. INT triple_addrfam;
  42. INT triple_socktype;
  43. INT triple_protocol;
  44. } MAPPING_TRIPLE, *PMAPPING_TRIPLE;
  45. MAPPING_TRIPLE stream_triples[] = {
  46. { AF_NS, SOCK_STREAM, NSPROTO_SPX },
  47. { AF_NS, SOCK_SEQPACKET, NSPROTO_SPX },
  48. { AF_NS, SOCK_STREAM, NSPROTO_SPXII },
  49. { AF_NS, SOCK_SEQPACKET, NSPROTO_SPXII },
  50. };
  51. int stream_num_triples = 4; /* When SPXII - set to 4 */
  52. int stream_table_size = sizeof(stream_triples);
  53. /**
  54. For IPX we assign the default packet type according to the
  55. protocol type used. The user can also we setsockopt
  56. to set the packet type.
  57. **/
  58. MAPPING_TRIPLE dgram_triples[] = {
  59. { AF_NS, SOCK_DGRAM, NSPROTO_IPX },
  60. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+1 },
  61. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+2 },
  62. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+3 },
  63. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+4 },
  64. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+5 },
  65. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+6 },
  66. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+7 },
  67. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+8 },
  68. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+9 },
  69. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+10 },
  70. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+11 },
  71. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+12 },
  72. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+13 },
  73. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+14 },
  74. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+15 },
  75. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+16 },
  76. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+17 },
  77. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+18 },
  78. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+19 },
  79. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+20 },
  80. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+21 },
  81. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+22 },
  82. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+23 },
  83. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+24 },
  84. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+25 },
  85. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+26 },
  86. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+27 },
  87. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+28 },
  88. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+29 },
  89. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+30 },
  90. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+31 },
  91. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+32 },
  92. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+33 },
  93. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+34 },
  94. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+35 },
  95. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+36 },
  96. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+37 },
  97. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+38 },
  98. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+39 },
  99. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+40 },
  100. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+41 },
  101. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+42 },
  102. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+43 },
  103. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+44 },
  104. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+45 },
  105. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+46 },
  106. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+47 },
  107. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+48 },
  108. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+49 },
  109. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+50 },
  110. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+51 },
  111. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+52 },
  112. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+53 },
  113. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+54 },
  114. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+55 },
  115. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+56 },
  116. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+57 },
  117. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+58 },
  118. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+59 },
  119. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+60 },
  120. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+61 },
  121. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+62 },
  122. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+63 },
  123. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+64 },
  124. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+65 },
  125. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+66 },
  126. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+67 },
  127. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+68 },
  128. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+69 },
  129. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+70 },
  130. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+71 },
  131. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+72 },
  132. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+73 },
  133. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+74 },
  134. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+75 },
  135. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+76 },
  136. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+77 },
  137. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+78 },
  138. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+79 },
  139. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+80 },
  140. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+81 },
  141. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+82 },
  142. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+83 },
  143. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+84 },
  144. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+85 },
  145. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+86 },
  146. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+87 },
  147. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+88 },
  148. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+89 },
  149. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+90 },
  150. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+91 },
  151. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+92 },
  152. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+93 },
  153. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+94 },
  154. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+95 },
  155. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+96 },
  156. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+97 },
  157. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+98 },
  158. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+99 },
  159. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+100 },
  160. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+101 },
  161. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+102 },
  162. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+103 },
  163. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+104 },
  164. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+105 },
  165. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+106 },
  166. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+107 },
  167. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+108 },
  168. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+109 },
  169. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+110 },
  170. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+111 },
  171. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+112 },
  172. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+113 },
  173. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+114 },
  174. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+115 },
  175. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+116 },
  176. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+117 },
  177. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+118 },
  178. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+119 },
  179. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+120 },
  180. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+121 },
  181. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+122 },
  182. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+123 },
  183. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+124 },
  184. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+125 },
  185. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+126 },
  186. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+127 },
  187. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+128 },
  188. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+129 },
  189. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+130 },
  190. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+131 },
  191. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+132 },
  192. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+133 },
  193. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+134 },
  194. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+135 },
  195. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+136 },
  196. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+137 },
  197. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+138 },
  198. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+139 },
  199. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+140 },
  200. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+141 },
  201. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+142 },
  202. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+143 },
  203. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+144 },
  204. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+145 },
  205. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+146 },
  206. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+147 },
  207. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+148 },
  208. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+149 },
  209. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+150 },
  210. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+151 },
  211. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+152 },
  212. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+153 },
  213. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+154 },
  214. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+155 },
  215. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+156 },
  216. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+157 },
  217. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+158 },
  218. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+159 },
  219. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+160 },
  220. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+161 },
  221. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+162 },
  222. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+163 },
  223. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+164 },
  224. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+165 },
  225. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+166 },
  226. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+167 },
  227. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+168 },
  228. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+169 },
  229. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+170 },
  230. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+171 },
  231. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+172 },
  232. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+173 },
  233. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+174 },
  234. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+175 },
  235. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+176 },
  236. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+177 },
  237. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+178 },
  238. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+179 },
  239. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+180 },
  240. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+181 },
  241. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+182 },
  242. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+183 },
  243. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+184 },
  244. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+185 },
  245. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+186 },
  246. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+187 },
  247. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+188 },
  248. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+189 },
  249. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+190 },
  250. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+191 },
  251. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+192 },
  252. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+193 },
  253. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+194 },
  254. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+195 },
  255. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+196 },
  256. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+197 },
  257. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+198 },
  258. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+199 },
  259. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+200 },
  260. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+201 },
  261. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+202 },
  262. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+203 },
  263. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+204 },
  264. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+205 },
  265. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+206 },
  266. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+207 },
  267. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+208 },
  268. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+209 },
  269. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+210 },
  270. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+211 },
  271. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+212 },
  272. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+213 },
  273. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+214 },
  274. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+215 },
  275. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+216 },
  276. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+217 },
  277. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+218 },
  278. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+219 },
  279. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+220 },
  280. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+221 },
  281. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+222 },
  282. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+223 },
  283. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+224 },
  284. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+225 },
  285. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+226 },
  286. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+227 },
  287. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+228 },
  288. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+229 },
  289. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+230 },
  290. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+231 },
  291. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+232 },
  292. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+233 },
  293. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+234 },
  294. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+235 },
  295. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+236 },
  296. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+237 },
  297. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+238 },
  298. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+239 },
  299. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+240 },
  300. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+241 },
  301. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+242 },
  302. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+243 },
  303. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+244 },
  304. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+245 },
  305. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+246 },
  306. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+247 },
  307. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+248 },
  308. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+249 },
  309. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+250 },
  310. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+251 },
  311. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+252 },
  312. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+253 },
  313. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+254 },
  314. { AF_NS, SOCK_DGRAM, NSPROTO_IPX+255 }
  315. };
  316. int dgram_num_triples = 256;
  317. int dgram_table_size = sizeof(dgram_triples);