Listing 2: NETWORK.C Winsock support functions
/**********************************************************/ /* NETWORK.C - Winsock support functions */ /**********************************************************/ #include "popmail.rh" #include "winsock.h" #include "globals.h" extern WSADATA WSAData; extern HWND hwndClient; extern stConfig Config; extern char HostInfo[MAXGETHOSTSTRUCT]; HANDLE TaskHandle; BOOL InitNetwork(void) { char work_buffer[60]; Display("Attempting to initialize winsock layer...\r\n"); if (WSAStartup(0x101, &WSAData)) return FALSE; if ((((int) LOBYTE(WSAData.wVersion) > 1) && ((int) HIBYTE(WSAData.wVersion > 1)) && (((int) LOBYTE(WSAData.wHighVersion) < 1) && ((int) HIBYTE(WSAData.wHighVersion) < 1)))) return FALSE; sprintf(work_buffer, "PopMail Detected: %s\r\n", WSAData.szDescription); Display(work_buffer); sprintf(work_buffer, "Maximum Sockets : %d\r\n", WSAData.iMaxSockets); Display(work_buffer); return TRUE; } void ShutDownNetwork(void) { Display("Shutting down winsock layer...\r\n"); WSACleanup(); } void LookupServer(HWND hwnd) { char work_buffer[100]; sprintf(work_buffer, "Looking Up : %s\r\n", Config.ServerName); Display(work_buffer); TaskHandle = WSAAsyncGetHostByName(hwnd, IMSG_HOSTFOUND, Config.ServerName, HostInfo, MAXGETHOSTSTRUCT); } void ConnectToServer(HWND hwnd) { int nError; SOCKET Socket; SOCKADDR_IN LocalAddr, ServerAddr; Display("Connecting to server.\r\n"); Socket = socket(AF_INET, SOCK_STREAM, 0); if (Socket != INVALID_SOCKET) { LocalAddr.sin_family = AF_INET; LocalAddr.sin_port = 0; /* winsock will assign a local port number */ LocalAddr.sin_addr.s_addr = htonl(INADDR_ANY); Display("Binding local socket.\r\n"); if (bind(Socket, (LPSOCKADDR)&LocalAddr, sizeof(LocalAddr)) != SOCKET_ERROR) { ServerAddr.sin_family = AF_INET; ServerAddr.sin_port = htons(POP3_PORT); ServerAddr.sin_addr.s_addr = inet_addr(Config.ServerIp); Display("Selecting relevant network events.\r\n"); if (WSAAsyncSelect(Socket, hwnd, IMSG_NETIO, FD_CONNECT | FD_READ | FD_CLOSE) != SOCKET_ERROR) { Display("Requesting stream socket connection to server's POP port.\r\n"); if (connect(Socket, (LPSOCKADDR)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR) { nError = WSAGetLastError(); if (nError != WSAEWOULDBLOCK) Display("Error connecting bound socket to server!"); } } else Display("Error setting up WSAAsyncSelect on bound socket!"); } else Display("Error binding socket to address.r\n"); } else Display("Error creating outbound socket.\r\n"); }