diff options
Diffstat (limited to '')
| -rw-r--r-- | src/client.cpp | 54 | ||||
| -rw-r--r-- | src/client.h | 10 | ||||
| -rw-r--r-- | src/plugger.h | 6 | ||||
| -rw-r--r-- | src/socket.cpp | 12 | ||||
| -rw-r--r-- | src/socket.h | 2 |
5 files changed, 79 insertions, 5 deletions
diff --git a/src/client.cpp b/src/client.cpp index 0e48285..63822ba 100644 --- a/src/client.cpp +++ b/src/client.cpp | |||
| @@ -10,7 +10,8 @@ | |||
| 10 | 10 | ||
| 11 | Bu::Client::Client( Bu::Socket *pSocket ) : | 11 | Bu::Client::Client( Bu::Socket *pSocket ) : |
| 12 | pSocket( pSocket ), | 12 | pSocket( pSocket ), |
| 13 | pProto( NULL ) | 13 | pProto( NULL ), |
| 14 | nRBOffset( 0 ) | ||
| 14 | { | 15 | { |
| 15 | } | 16 | } |
| 16 | 17 | ||
| @@ -103,3 +104,54 @@ void Bu::Client::write( const char *pData, int nBytes ) | |||
| 103 | sWriteBuf.append( pData, nBytes ); | 104 | sWriteBuf.append( pData, nBytes ); |
| 104 | } | 105 | } |
| 105 | 106 | ||
| 107 | void Bu::Client::write( int8_t nData ) | ||
| 108 | { | ||
| 109 | sWriteBuf.append( (const char *)&nData, sizeof(nData) ); | ||
| 110 | } | ||
| 111 | |||
| 112 | void Bu::Client::write( int16_t nData ) | ||
| 113 | { | ||
| 114 | sWriteBuf.append( (const char *)&nData, sizeof(nData) ); | ||
| 115 | } | ||
| 116 | |||
| 117 | void Bu::Client::write( int32_t nData ) | ||
| 118 | { | ||
| 119 | sWriteBuf.append( (const char *)&nData, sizeof(nData) ); | ||
| 120 | } | ||
| 121 | |||
| 122 | void Bu::Client::write( int64_t nData ) | ||
| 123 | { | ||
| 124 | sWriteBuf.append( (const char *)&nData, sizeof(nData) ); | ||
| 125 | } | ||
| 126 | |||
| 127 | void Bu::Client::read( char *pData, int nBytes ) | ||
| 128 | { | ||
| 129 | memcpy( pData, sReadBuf.getStr()+nRBOffset, nBytes ); | ||
| 130 | nRBOffset += nBytes; | ||
| 131 | if( sReadBuf.getSize()-nRBOffset == 0 ) | ||
| 132 | { | ||
| 133 | sReadBuf.clear(); | ||
| 134 | nRBOffset = 0; | ||
| 135 | } | ||
| 136 | // This is an experimental threshold, maybe I'll make this configurable | ||
| 137 | // later on. | ||
| 138 | else if( | ||
| 139 | (sReadBuf.getSize() >= 1024 && nRBOffset >= sReadBuf.getSize()/2) || | ||
| 140 | (nRBOffset >= sReadBuf.getSize()/4) | ||
| 141 | ) | ||
| 142 | { | ||
| 143 | sReadBuf.trimFront( nRBOffset ); | ||
| 144 | nRBOffset = 0; | ||
| 145 | } | ||
| 146 | } | ||
| 147 | |||
| 148 | long Bu::Client::getInputSize() | ||
| 149 | { | ||
| 150 | return sReadBuf.getSize()-nRBOffset; | ||
| 151 | } | ||
| 152 | |||
| 153 | const Bu::Socket *Bu::Client::getSocket() const | ||
| 154 | { | ||
| 155 | return pSocket; | ||
| 156 | } | ||
| 157 | |||
diff --git a/src/client.h b/src/client.h index f228e96..b400bb3 100644 --- a/src/client.h +++ b/src/client.h | |||
| @@ -25,7 +25,12 @@ namespace Bu | |||
| 25 | Bu::FString &getInput(); | 25 | Bu::FString &getInput(); |
| 26 | Bu::FString &getOutput(); | 26 | Bu::FString &getOutput(); |
| 27 | void write( const char *pData, int nBytes ); | 27 | void write( const char *pData, int nBytes ); |
| 28 | void read( const char *pData, int nBytes ); | 28 | void write( int8_t nData ); |
| 29 | void write( int16_t nData ); | ||
| 30 | void write( int32_t nData ); | ||
| 31 | void write( int64_t nData ); | ||
| 32 | void read( char *pData, int nBytes ); | ||
| 33 | long getInputSize(); | ||
| 29 | 34 | ||
| 30 | void setProtocol( Protocol *pProto ); | 35 | void setProtocol( Protocol *pProto ); |
| 31 | Bu::Protocol *getProtocol(); | 36 | Bu::Protocol *getProtocol(); |
| @@ -33,10 +38,13 @@ namespace Bu | |||
| 33 | 38 | ||
| 34 | bool isOpen(); | 39 | bool isOpen(); |
| 35 | 40 | ||
| 41 | const Bu::Socket *getSocket() const; | ||
| 42 | |||
| 36 | private: | 43 | private: |
| 37 | Bu::Socket *pSocket; | 44 | Bu::Socket *pSocket; |
| 38 | Bu::Protocol *pProto; | 45 | Bu::Protocol *pProto; |
| 39 | Bu::FString sReadBuf; | 46 | Bu::FString sReadBuf; |
| 47 | int nRBOffset; | ||
| 40 | Bu::FString sWriteBuf; | 48 | Bu::FString sWriteBuf; |
| 41 | }; | 49 | }; |
| 42 | } | 50 | } |
diff --git a/src/plugger.h b/src/plugger.h index 79a3271..615a662 100644 --- a/src/plugger.h +++ b/src/plugger.h | |||
| @@ -37,7 +37,7 @@ namespace Bu | |||
| 37 | { \ | 37 | { \ |
| 38 | delete pCls; \ | 38 | delete pCls; \ |
| 39 | } \ | 39 | } \ |
| 40 | PluginInfo classname = { \ | 40 | Bu::PluginInfo classname = { \ |
| 41 | #classname, name, ver, rev, \ | 41 | #classname, name, ver, rev, \ |
| 42 | create ##classname, destroy ##classname }; \ | 42 | create ##classname, destroy ##classname }; \ |
| 43 | } | 43 | } |
| @@ -52,7 +52,7 @@ namespace Bu | |||
| 52 | { \ | 52 | { \ |
| 53 | delete pCls; \ | 53 | delete pCls; \ |
| 54 | } \ | 54 | } \ |
| 55 | PluginInfo pluginname = { \ | 55 | Bu::PluginInfo pluginname = { \ |
| 56 | #pluginname, name, ver, rev, \ | 56 | #pluginname, name, ver, rev, \ |
| 57 | (void *(*)())(create ##classname), \ | 57 | (void *(*)())(create ##classname), \ |
| 58 | (void (*)( void * ))(destroy ##classname) }; \ | 58 | (void (*)( void * ))(destroy ##classname) }; \ |
| @@ -68,7 +68,7 @@ namespace Bu | |||
| 68 | { \ | 68 | { \ |
| 69 | delete pCls; \ | 69 | delete pCls; \ |
| 70 | } \ | 70 | } \ |
| 71 | PluginInfo structname = { \ | 71 | Bu::PluginInfo structname = { \ |
| 72 | #pluginname, name, ver, rev, \ | 72 | #pluginname, name, ver, rev, \ |
| 73 | (void *(*)())(create ##classname), \ | 73 | (void *(*)())(create ##classname), \ |
| 74 | (void (*)( void * ))(destroy ##classname) }; \ | 74 | (void (*)( void * ))(destroy ##classname) }; \ |
diff --git a/src/socket.cpp b/src/socket.cpp index bd05024..5a3097c 100644 --- a/src/socket.cpp +++ b/src/socket.cpp | |||
| @@ -276,3 +276,15 @@ bool Bu::Socket::isOpen() | |||
| 276 | return bActive; | 276 | return bActive; |
| 277 | } | 277 | } |
| 278 | 278 | ||
| 279 | Bu::FString Bu::Socket::getAddress() const | ||
| 280 | { | ||
| 281 | struct sockaddr_in addr; | ||
| 282 | socklen_t len = sizeof(addr); | ||
| 283 | addr.sin_family = AF_INET; | ||
| 284 | getsockname( nSocket, (sockaddr *)(&addr), &len ); | ||
| 285 | char buf[150]; | ||
| 286 | sprintf( buf, "%s", inet_ntoa( addr.sin_addr ) ); | ||
| 287 | |||
| 288 | return buf; | ||
| 289 | } | ||
| 290 | |||
diff --git a/src/socket.h b/src/socket.h index 0ccee3b..9e36041 100644 --- a/src/socket.h +++ b/src/socket.h | |||
| @@ -42,6 +42,8 @@ namespace Bu | |||
| 42 | virtual bool isBlocking(); | 42 | virtual bool isBlocking(); |
| 43 | virtual void setBlocking( bool bBlocking=true ); | 43 | virtual void setBlocking( bool bBlocking=true ); |
| 44 | 44 | ||
| 45 | Bu::FString getAddress() const; | ||
| 46 | |||
| 45 | private: | 47 | private: |
| 46 | int nSocket; | 48 | int nSocket; |
| 47 | bool bActive; | 49 | bool bActive; |
