Difference for arch/dos/arch_ip.cpp from version 1.1 to 1.2


version 1.1 version 1.2
Line 1
 
Line 1
 /*  /*
  * arch_ip.cpp - arch specific udp/ip code.  (dos ver)   * arch_ip.cpp - arch specific udp/ip code.  (dos ver)
  * added 2000/02/07 Matt Mueller   * added 2000/02/07 Matt Mueller
    * edited for winconsole 2000/02/28 Victor Rachels
  */   */
   
 #include <string.h>  #include <string.h>
 #include <unistd.h>  #include <unistd.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <ctype.h>  #include <ctype.h>
   
   #include "winsock.h"
   
 extern "C" {  extern "C" {
 #include "ipx_drv.h"  #include "ipx_drv.h"
 #include "types.h"  #include "types.h"
Line 14
 
Line 18
 //#include "multi.h"  //#include "multi.h"
 }  }
   
   
 #include "ip_base.h"  #include "ip_base.h"
 #include "ipclient.h"  #include "ipclient.h"
   
 //dos stub file.  needs to be filled in. (see the win32 or linux ver for examples)  
   
   #include "bootp.h"
   
   Socket *socket;
   
   //dos stub file.  needs to be filled in. (see the win32 or linux ver for examples)
   
 /* Do hostname resolve on name "buf" and return the address in buffer "qhbuf".  /* Do hostname resolve on name "buf"
  */   */
 int arch_ip_queryhost(ip_addr *addr,char *buf,ushort baseport)  int arch_ip_queryhost(ip_addr *addr,char *buf,ushort baseport)
 {  {
  return -1;   char *s;
    ushort p;
    long intaddr;
    int i,addrlist[4];
   
      if ((s=strrchr(buf,':')))
       {
         *s='\0';
         p=ip_portshift(baseport,s+1);
 }  }
      else p=ip_portshift(baseport,NULL);
   
 int ip_sendtoca(ip_addr addr,const void *buf,int len){    intaddr=Resolve(buf);
  return -1;  
      for(i=0;i<4;i++)
       {
        addrlist[i] = intaddr & 0xff;
        intaddr = intaddr >> 0x08;
 }  }
   
 int arch_ip_get_my_addr(ushort myport){    addr->set(4,(u_char *)addrlist,p);
  return -1;  
     return 0;
 }  }
 int arch_ip_open_socket(int port){  
   int ip_sendtoca(ip_addr addr,const void *buf,int len)
   {
      if (addr.addrlen()!=4)
       return 0;//not handled yet
   
   #ifdef UDPDEBUG
     printf(MSGHDR "sendtoca((%d) ",len);
     addr.dump();
     puts(").");
   #endif
   
    InetAddress sto;
   
     sto.family = AF_INET;
     sto.port   = *(unsigned short *)(addr.addr+4);
     memcpy(&sto.address,addr.addr,4);
   
     return (socket->Send((char *)buf,len,0,&sto,sizeof(sto)) > 0);
   }
   
   int arch_ip_get_my_addr(ushort myport)
   {
     /* no way to do this in this API that I could find */
  return -1;   return -1;
 }  }
 void arch_ip_close_socket(void) {  
   int arch_ip_open_socket(int port)
   {
      if(socket)
       FAIL("socket already open");
   
     SocketInit();
   
     socket = new Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
   #ifdef UDPDEBUG
     socket->_ErrorDisplay = 1;
   #endif
   
    int val_one;
   
     val_one = 1; // wtf is val_one used as?
     socket->SetOption(&val_one,SOL_SOCKET,SO_BROADCAST,sizeof(val_one));
   
    InetAddress sin;
   
     sin.family =AF_INET;
     sin.port   =port;
     sin.address=0; // any
   
     socket->Bind(&sin,sizeof(InetAddress));
   
     return 0;
   }
   
   void arch_ip_close_socket(void)
   {
      if(socket)
       delete(socket);
      else
       msg("close socket without open");
   
     socket = NULL;
  return;   return;
 }  }
 int arch_ip_recvfrom(char*outbuf,int outbufsize,struct ipx_recv_data *rd){  
   int arch_ip_recvfrom(char *outbuf, int outbufsize, struct ipx_recv_data *rd)
   {
   
    InetAddress sfrm;
    int size, frmlen;
   
     size = socket->Recv((void *)outbuf,(int)outbufsize,0,(void *)&sfrm,(int &)frmlen); //wtf??
   
      if(size < 0)
  return -1;   return -1;
 }     if(sfrm.family != AF_INET)
 int arch_ip_PacketReady(void) {  
  return -1;   return -1;
   
     ip_addr tmpip;
   
     tmpip.set(4, (u_char*)&sfrm.address, sfrm.port);
   
   #ifdef UDPDEBUG
     printf(MSGHDR "recvfrom((%d-2=%d),",size,size-2);
     tmpip.dump();
     puts(").");
   #endif
   
   
     memcpy(rd->src_node,&tmpip,sizeof(ip_addr*)); //eeennhhh?
        /* src_node is ubyte[6] ip_addr is class prot: int pub: ubyte[6] */
   
     return size;
   }
   
   int arch_ip_PacketReady(void)
   {
     return socket->Select(FD_READ);
 }  }

Legend:
line(s) removed in v.1.1 
line(s) changed
 line(s) added in v.1.2