00001 /* 00002 Copyright (c) 2000-2003, Jelle Kok, University of Amsterdam 00003 All rights reserved. 00004 00005 Redistribution and use in source and binary forms, with or without 00006 modification, are permitted provided that the following conditions are met: 00007 00008 1. Redistributions of source code must retain the above copyright notice, this 00009 list of conditions and the following disclaimer. 00010 00011 2. Redistributions in binary form must reproduce the above copyright notice, 00012 this list of conditions and the following disclaimer in the documentation 00013 and/or other materials provided with the distribution. 00014 00015 3. Neither the name of the University of Amsterdam nor the names of its 00016 contributors may be used to endorse or promote products derived from this 00017 software without specific prior written permission. 00018 00019 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00020 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00021 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00022 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 00023 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00024 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00025 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00026 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00027 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00028 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 */ 00030 00048 #ifndef _CONNECTION_ 00049 #define _CONNECTION_ 00050 00051 #include <stdio.h> // printf, FILE 00052 #include <iostream> // ostream 00053 #ifdef WIN32 00054 #include <windows.h> // sockaddr_in 00055 #else 00056 #include <netdb.h> // sockaddr_in 00057 #include <arpa/inet.h> // sockaddr_in 00058 #endif 00059 00060 using namespace std; 00061 00063 typedef struct _socket{ 00064 int socketfd ; 00065 struct sockaddr_in serv_addr ; 00066 } Socket ; 00067 00068 /********************** CONNECTION *******************************************/ 00069 00075 class Connection { 00076 00077 Socket m_sock; 00078 int m_iMaxMsgSize; 00079 public: 00080 00081 // constructors 00082 Connection ( ); 00083 Connection ( const char *hostname, int port, int iSize ); 00084 ~Connection ( ); 00085 00086 // methods that deal with the connection itself 00087 bool connect ( const char *host, int port ); 00088 void disconnect ( void ); 00089 bool isConnected ( void )const; 00090 00091 // methods that deal with the communication over the connection 00092 #ifndef WIN32 00093 int message_loop ( FILE *in, FILE *out ); 00094 #endif 00095 int receiveMessage ( char *msg, int maxsize ); 00096 bool sendMessage ( const char *msg ); 00097 00098 void show ( ostream os ); 00099 00100 }; 00101 00102 #endif