From 6175ca03be6d0d51359f9017123708987d0f5eb7 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Wed, 15 Aug 2007 23:23:39 +0000 Subject: add tag v1_8_5_91 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_91@13046 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_1_8_5/wince/winsock2.c | 338 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 ruby_1_8_5/wince/winsock2.c (limited to 'ruby_1_8_5/wince/winsock2.c') 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 +#include "wince.h" +#ifdef _WINSOCK2_C_DEBUG_MAIN_ + #include +#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 -- cgit v1.2.3