summaryrefslogtreecommitdiff
path: root/ruby_1_8_5/wince/winsock2.c
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_8_5/wince/winsock2.c')
-rw-r--r--ruby_1_8_5/wince/winsock2.c338
1 files changed, 338 insertions, 0 deletions
diff --git a/ruby_1_8_5/wince/winsock2.c b/ruby_1_8_5/wince/winsock2.c
new file mode 100644
index 0000000000..9b2a5be600
--- /dev/null
+++ b/ruby_1_8_5/wince/winsock2.c
@@ -0,0 +1,338 @@
+/***************************************************************
+ winsock2.c
+***************************************************************/
+
+//#define _WINSOCK2_C_DEBUG_MAIN_
+
+#include <windows.h>
+#include "wince.h"
+#ifdef _WINSOCK2_C_DEBUG_MAIN_
+ #include <winsock.h>
+#endif
+
+#ifndef _WINSOCK2_C_DEBUG_MAIN_
+struct servent{
+ char* s_name; /* official service name */
+ char** s_aliases; /* alias list */
+ short s_port; /* port # */
+ char* s_proto; /* protocol to use */
+};
+struct protoent{
+ char* p_name; /* official protocol name */
+ char** p_aliases; /* alias list */
+ short p_proto; /* protocol # */
+};
+#endif
+
+struct sproto{
+ short num;
+ char name[10];
+};
+struct sserv{
+ short num;
+ char protoname[10];
+ char servname[20];
+};
+
+static struct sproto _proto_table[11]={
+ 0, "ip",
+ 1, "icmp",
+ 3, "ggp",
+ 6, "tcp",
+ 8, "egp",
+ 12, "pup",
+ 17, "udp",
+ 20, "hmp",
+ 22, "xns-idp",
+ 27, "rdp",
+ 66, "rvd",
+};
+
+static struct sserv _serv_table[142]={
+ 7, "tcp", "echo",
+ 7, "udp", "echo",
+ 9, "tcp", "discard",
+ 9, "udp", "discard",
+ 11, "tcp", "systat",
+ 11, "udp", "systat",
+ 13, "tcp", "daytime",
+ 13, "udp", "daytime",
+ 15, "tcp", "netstat",
+ 17, "tcp", "qotd",
+ 17, "udp", "qotd",
+ 19, "tcp", "chargen",
+ 19, "udp", "chargen",
+ 20, "tcp", "ftp-data",
+ 21, "tcp", "ftp",
+ 23, "tcp", "telnet",
+ 25, "tcp", "smtp",
+ 37, "tcp", "time",
+ 37, "udp", "time",
+ 39, "udp", "rlp",
+ 42, "tcp", "name",
+ 42, "udp", "name",
+ 43, "tcp", "whois",
+ 53, "tcp", "domain",
+ 53, "udp", "domain",
+ 53, "tcp", "nameserver",
+ 53, "udp", "nameserver",
+ 57, "tcp", "mtp",
+ 67, "udp", "bootp",
+ 69, "udp", "tftp",
+ 77, "tcp", "rje",
+ 79, "tcp", "finger",
+ 87, "tcp", "link",
+ 95, "tcp", "supdup",
+ 101, "tcp", "hostnames",
+ 102, "tcp", "iso-tsap",
+ 103, "tcp", "dictionary",
+ 103, "tcp", "x400",
+ 104, "tcp", "x400-snd",
+ 105, "tcp", "csnet-ns",
+ 109, "tcp", "pop",
+ 109, "tcp", "pop2",
+ 110, "tcp", "pop3",
+ 111, "tcp", "portmap",
+ 111, "udp", "portmap",
+ 111, "tcp", "sunrpc",
+ 111, "udp", "sunrpc",
+ 113, "tcp", "auth",
+ 115, "tcp", "sftp",
+ 117, "tcp", "path",
+ 117, "tcp", "uucp-path",
+ 119, "tcp", "nntp",
+ 123, "udp", "ntp",
+ 137, "udp", "nbname",
+ 138, "udp", "nbdatagram",
+ 139, "tcp", "nbsession",
+ 144, "tcp", "NeWS",
+ 153, "tcp", "sgmp",
+ 158, "tcp", "tcprepo",
+ 161, "tcp", "snmp",
+ 162, "tcp", "snmp-trap",
+ 170, "tcp", "print-srv",
+ 175, "tcp", "vmnet",
+ 315, "udp", "load",
+ 400, "tcp", "vmnet0",
+ 500, "udp", "sytek",
+ 512, "udp", "biff",
+ 512, "tcp", "exec",
+ 513, "tcp", "login",
+ 513, "udp", "who",
+ 514, "tcp", "shell",
+ 514, "udp", "syslog",
+ 515, "tcp", "printer",
+ 517, "udp", "talk",
+ 518, "udp", "ntalk",
+ 520, "tcp", "efs",
+ 520, "udp", "route",
+ 525, "udp", "timed",
+ 526, "tcp", "tempo",
+ 530, "tcp", "courier",
+ 531, "tcp", "conference",
+ 531, "udp", "rvd-control",
+ 532, "tcp", "netnews",
+ 533, "udp", "netwall",
+ 540, "tcp", "uucp",
+ 543, "tcp", "klogin",
+ 544, "tcp", "kshell",
+ 550, "udp", "new-rwho",
+ 556, "tcp", "remotefs",
+ 560, "udp", "rmonitor",
+ 561, "udp", "monitor",
+ 600, "tcp", "garcon",
+ 601, "tcp", "maitrd",
+ 602, "tcp", "busboy",
+ 700, "udp", "acctmaster",
+ 701, "udp", "acctslave",
+ 702, "udp", "acct",
+ 703, "udp", "acctlogin",
+ 704, "udp", "acctprinter",
+ 704, "udp", "elcsd",
+ 705, "udp", "acctinfo",
+ 706, "udp", "acctslave2",
+ 707, "udp", "acctdisk",
+ 750, "tcp", "kerberos",
+ 750, "udp", "kerberos",
+ 751, "tcp", "kerberos_master",
+ 751, "udp", "kerberos_master",
+ 752, "udp", "passwd_server",
+ 753, "udp", "userreg_server",
+ 754, "tcp", "krb_prop",
+ 888, "tcp", "erlogin",
+ 1109, "tcp", "kpop",
+ 1167, "udp", "phone",
+ 1524, "tcp", "ingreslock",
+ 1666, "udp", "maze",
+ 2049, "udp", "nfs",
+ 2053, "tcp", "knetd",
+ 2105, "tcp", "eklogin",
+ 5555, "tcp", "rmt",
+ 5556, "tcp", "mtb",
+ 9535, "tcp", "man",
+ 9536, "tcp", "w",
+ 9537, "tcp", "mantst",
+ 10000, "tcp", "bnews",
+ 10000, "udp", "rscs0",
+ 10001, "tcp", "queue",
+ 10001, "udp", "rscs1",
+ 10002, "tcp", "poker",
+ 10002, "udp", "rscs2",
+ 10003, "tcp", "gateway",
+ 10003, "udp", "rscs3",
+ 10004, "tcp", "remp",
+ 10004, "udp", "rscs4",
+ 10005, "udp", "rscs5",
+ 10006, "udp", "rscs6",
+ 10007, "udp", "rscs7",
+ 10008, "udp", "rscs8",
+ 10009, "udp", "rscs9",
+ 10010, "udp", "rscsa",
+ 10011, "udp", "rscsb",
+ 10012, "tcp", "qmaster",
+ 10012, "udp", "qmaster",
+};
+
+/* WinCE doesn't have /etc/protocols. */
+struct protoent* getprotobyname(const char* name)
+{
+ static struct protoent pe;
+ int i;
+ int len = strlen(name);
+
+ memset( &pe, 0, sizeof(struct protoent) );
+
+ for(i=0; i<9; i++)
+ {
+ if( 0==strnicmp(_proto_table[i].name, name, len) )
+ {
+ pe.p_name = _proto_table[i].name;
+ pe.p_proto= _proto_table[i].num;
+ break;
+ }
+ }
+
+ return &pe;
+}
+
+struct protoent* getprotobynumber(int proto)
+{
+ static struct protoent pe={0};
+ int i;
+
+ memset( &pe, 0, sizeof(struct protoent) );
+
+ for(i=0; i<9; i++)
+ {
+ if( proto == _proto_table[i].num )
+ {
+ pe.p_name = _proto_table[i].name;
+ pe.p_proto= _proto_table[i].num;
+ break;
+ }
+ }
+
+ return &pe;
+}
+
+/* WinCE doesn't have /etc/services. */
+struct servent* getservbyname(const char* name,
+ const char* proto)
+{
+ static struct servent se;
+ int i;
+ int slen = strlen(name), plen = strlen(proto);
+
+ memset( &se, 0, sizeof(struct servent) );
+
+ if( proto==NULL ) return NULL;
+ if( 0!=strnicmp( proto, "tcp", 3 ) &&
+ 0!=strnicmp( proto, "udp", 3 ) )
+ return NULL;
+
+ for( i=0; i<142; i++ )
+ {
+ if( 0==strnicmp( name, _serv_table[i].servname, slen ) &&
+ 0==strnicmp( proto, _serv_table[i].protoname, plen ) )
+ {
+ char hc, lc;
+ se.s_name = _serv_table[i].servname;
+ se.s_proto= _serv_table[i].protoname;
+ hc = (_serv_table[i].num&0xFF00)>>8;
+ lc = _serv_table[i].num&0xFF;
+ se.s_port = (lc<<8) + hc;
+ break;
+ }
+ }
+
+ return &se;
+}
+
+struct servent* getservbyport(int port, const char* proto)
+{
+ static struct servent se;
+ int i;
+ int plen = strlen(proto);
+ short sport;
+ char lc, hc;
+
+ hc = (port&0xFF00)>>8;
+ lc = port&0xFF;
+
+ sport = (lc<<8) + hc;
+
+ memset( &se, 0, sizeof(struct servent) );
+
+ if( proto==NULL ) return NULL;
+ if( 0!=strnicmp( proto, "tcp", 3 ) &&
+ 0!=strnicmp( proto, "udp", 3 ) )
+ return NULL;
+
+ for( i=0; i<142; i++ )
+ {
+ if( sport == _serv_table[i].num &&
+ 0==strnicmp( proto, _serv_table[i].protoname, plen ) )
+ {
+ se.s_name = _serv_table[i].servname;
+ se.s_proto= _serv_table[i].protoname;
+ se.s_port = port;
+ break;
+ }
+ }
+
+ return &se;
+}
+
+
+#ifdef _WINSOCK2_C_DEBUG_MAIN_
+
+int main()
+{
+ WORD wVersionRequested = MAKEWORD(1,1);
+ WSADATA wsaData;
+ int nErrorStatus;
+ struct protoent pe1, pe2;
+ struct servent se1, se2;
+
+ nErrorStatus = WSAStartup(wVersionRequested, &wsaData);
+ if(nErrorStatus != 0)
+ return -1;
+
+ pe1 = *getprotobyname("UDP");
+ pe2 = *_getprotobyname("UDP");
+
+// pe1 = *getprotobynumber(17);
+// pe2 = *_getprotobynumber(17);
+
+// se1 = *getservbyname("gateway", "tcp");
+// se2 = *_getservbyname("gateway", "tcp");
+
+ se1 = *getservbyport(0x1327, "tcp");
+ se2 = *_getservbyport(0x1327, "tcp");
+
+ WSACleanup();
+
+ return 0;
+}
+
+#endif