Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

netstream.cc

Go to the documentation of this file.
00001 #ifndef PLATFORM_APERIOS
00002 #include "netstream.h"
00003 #include <iostream>
00004 
00005 using namespace std;
00006 
00007 const unsigned int IPaddr::maxHostNameLen = 256;
00008 
00009 IPaddr::IPaddr() : server(), ipname(), ipport(0) { Init(); }
00010 
00011 IPaddr::IPaddr(const ipnum_t& num) : server(), ipname(), ipport(0) { Init(); set_num(num); }
00012 
00013 IPaddr::IPaddr(const ipname_t& name) : server(), ipname(), ipport(0) { Init(); set_name(name); }
00014 
00015 IPaddr::IPaddr(const ipnum_t& num, const ipport_t& port) : server(), ipname(), ipport(0) { Init(); set_addr(num,port); }
00016 
00017 IPaddr::IPaddr(const ipname_t& name, const ipport_t& port) : server(), ipname(), ipport(0) { Init(); set_addr(name,port); }
00018 
00019 bool IPaddr::set_num(const ipnum_t& num) {
00020   if(get_num()!=num) {
00021     Init();
00022     server.sin_family      = AF_INET;
00023     server.sin_addr.s_addr = htonl(num);
00024     server.sin_port        = htons(ipport);
00025     struct in_addr a;
00026     a.s_addr = server.sin_addr.s_addr;
00027     char addrname[maxHostNameLen];
00028     inet_ntop(AF_INET,&a,addrname,maxHostNameLen);
00029     ipname=addrname;
00030   }
00031   return true;
00032 }
00033 
00034 bool IPaddr::set_name(const ipname_t& name) {
00035   Init();
00036   if(!isalpha(name[0])) {
00037     // in case the string holds a dotted decimal we can convert directly
00038     struct in_addr a;
00039     if(inet_pton(AF_INET,name.c_str(),&a)<=0) {
00040       cerr << "IPaddr error: inet_pton failed: " << name << endl;
00041       return false;
00042     }
00043     return set_num(ntohl(a.s_addr));
00044   } else {
00045     Init();
00046     struct hostent * data = gethostbyname(name.c_str());
00047     if(data == NULL) {
00048       cerr << "IPaddr error: gethostbyname failed: " << name << endl;
00049       return false;
00050     }
00051     ipname=name;
00052 
00053     memcpy((char *) &server.sin_addr, data->h_addr_list[0], data->h_length);
00054     server.sin_family = data->h_addrtype;
00055     server.sin_port = htons(ipport);
00056   }
00057   return true;
00058 }
00059 
00060 IPaddr::ipname_t IPaddr::get_display_num() const {
00061   struct in_addr a;
00062   a.s_addr = server.sin_addr.s_addr;
00063   char addrname[maxHostNameLen];
00064   inet_ntop(AF_INET,&a,addrname,maxHostNameLen);
00065   return addrname;
00066 }
00067 
00068 IPaddr::ipname_t IPaddr::get_rname() const {
00069   struct in_addr a;
00070   a.s_addr = server.sin_addr.s_addr;
00071   struct hostent * data = gethostbyaddr((char*)&a,sizeof(a),AF_INET);
00072   if(data==NULL) {
00073     cerr << "IPaddr error: gethostbyaddr failed: " << ipname << endl;
00074     return "";
00075   }
00076   return data->h_name;
00077 }
00078 
00079 void IPaddr::Init() {
00080   ipname="";
00081   memset((char *) &server, sizeof(server), 0);
00082 }
00083 
00084 #endif

Tekkotsu v4.0
Generated Thu Nov 22 00:54:54 2007 by Doxygen 1.5.4