diff options
Diffstat (limited to 'SrcShared/SocketMessaging.h')
-rw-r--r-- | SrcShared/SocketMessaging.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/SrcShared/SocketMessaging.h b/SrcShared/SocketMessaging.h new file mode 100644 index 0000000..69f94b7 --- /dev/null +++ b/SrcShared/SocketMessaging.h @@ -0,0 +1,95 @@ +/* -*- mode: C++; tab-width: 4 -*- */ +/* ===================================================================== *\ + Copyright (c) 1998-2001 Palm, Inc. or its subsidiaries. + All rights reserved. + + This file is part of the Palm OS Emulator. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +\* ===================================================================== */ + +#ifndef _SOCKETMESSAGING_H_ +#define _SOCKETMESSAGING_H_ + + +struct sockaddr; + + +class CSocket +{ + public: + enum { kConnected, kDataReceived, kDisconnected }; + typedef void (*EventCallback) (CSocket*, int event); + + public: + static void Startup (void); + static void Shutdown (void); + static ErrCode IdleAll (void); + + public: + CSocket (void); + + // Call Delete() instead of the destructor. Our architecture + // is such that sockets can delete themselves while IdleAll + // is executing. Doing that causes IdleAll to freak out, + // so we have Delete() in order to defer the actual deletion. + void Delete (void); + Bool Deleted (void) const; + + virtual ErrCode Open (void) = 0; + virtual ErrCode Close (void) = 0; + virtual ErrCode Write (const void* buffer, long amountToWrite, long* amtWritten) = 0; + virtual ErrCode Read (void* buffer, long sizeOfBuffer, long* amtRead) = 0; + virtual Bool HasUnreadData (long timeout) = 0; + virtual ErrCode Idle (void) = 0; + + virtual Bool ShortPacketHack (void); + virtual Bool ByteswapHack (void); + + protected: + virtual ~CSocket (void); + + static void AddPending (void); + static void DeletePending (void); + + private: + Bool fDeleted; +}; + +class CTCPSocket : public CSocket +{ + public: + CTCPSocket (EventCallback, int port); + virtual ~CTCPSocket (void); + + virtual ErrCode Open (void); + virtual ErrCode Close (void); + virtual ErrCode Write (const void* buffer, long amountToWrite, long* amtWritten); + virtual ErrCode Read (void* buffer, long sizeOfBuffer, long* amtRead); + virtual Bool HasUnreadData (long timeout); + virtual ErrCode Idle (void); + + Bool ConnectPending (void); + ErrCode AcceptConnection (void); + Bool IsConnected (void); + Bool CheckConnection (void); + + protected: + SOCKET NewSocket (void); + sockaddr* FillAddress (sockaddr* addr, bool forConnect); + ErrCode ErrorOccurred (void); + ErrCode GetError (void); + + EventCallback fEventCallback; + int fPort; + + int fSocketState; + SOCKET fListeningSocket; + SOCKET fConnectedSocket; +}; + +#endif /* _SOCKETMESSAGING_H_ */ + |