aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/SocketMessaging.h
diff options
context:
space:
mode:
Diffstat (limited to 'SrcShared/SocketMessaging.h')
-rw-r--r--SrcShared/SocketMessaging.h95
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_ */
+