123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include <netdb.h>
- #include <string.h>
- /* do we really need all these?? */
- static int idx;
- static const unsigned char protos[] = {
- "\000ip\0"
- "\001icmp\0"
- "\002igmp\0"
- "\003ggp\0"
- "\004ipencap\0"
- "\005st\0"
- "\006tcp\0"
- "\010egp\0"
- "\014pup\0"
- "\021udp\0"
- "\024hmp\0"
- "\026xns-idp\0"
- "\033rdp\0"
- "\035iso-tp4\0"
- "\044xtp\0"
- "\045ddp\0"
- "\046idpr-cmtp\0"
- "\051ipv6\0"
- "\053ipv6-route\0"
- "\054ipv6-frag\0"
- "\055idrp\0"
- "\056rsvp\0"
- "\057gre\0"
- "\062esp\0"
- "\063ah\0"
- "\071skip\0"
- "\072ipv6-icmp\0"
- "\073ipv6-nonxt\0"
- "\074ipv6-opts\0"
- "\111rspf\0"
- "\121vmtp\0"
- "\131ospf\0"
- "\136ipip\0"
- "\142encap\0"
- "\147pim\0"
- "\377raw"
- };
- void endprotoent(void)
- {
- idx = 0;
- }
- void setprotoent(int stayopen)
- {
- idx = 0;
- }
- struct protoent *getprotoent(void)
- {
- static struct protoent p;
- static const char *aliases;
- if (idx >= sizeof protos) return NULL;
- p.p_proto = protos[idx];
- p.p_name = (char *)&protos[idx+1];
- p.p_aliases = (char **)&aliases;
- idx += strlen(p.p_name) + 2;
- return &p;
- }
- struct protoent *getprotobyname(const char *name)
- {
- struct protoent *p;
- endprotoent();
- do p = getprotoent();
- while (p && strcmp(name, p->p_name));
- return p;
- }
- struct protoent *getprotobynumber(int num)
- {
- struct protoent *p;
- endprotoent();
- do p = getprotoent();
- while (p && p->p_proto != num);
- return p;
- }
|