*/
void JsonRpcClient::SendMessage(const MessagePart& message)
{
- Netstring::WriteStringToFIFO(GetSendQueue(), message.ToJsonString());
+ Netstring::WriteStringToSocket(GetSelf(), message.ToJsonString());
}
/**
string jsonString;
MessagePart message;
- if (!Netstring::ReadStringFromFIFO(GetRecvQueue(), &jsonString))
+ if (!Netstring::ReadStringFromSocket(GetSelf(), &jsonString))
return;
message = MessagePart(jsonString);
using namespace icinga;
/**
- * Reads data from a FIFO in netstring format.
+ * Reads data from a TCP client in netstring format.
*
* @param fifo The FIFO to read from.
* @param[out] str The string that has been read from the FIFO.
* @exception InvalidNetstringException The input stream is invalid.
* @see https://github.com/PeterScott/netstring-c/blob/master/netstring.c
*/
-bool Netstring::ReadStringFromFIFO(FIFO::Ptr fifo, string *str)
+bool Netstring::ReadStringFromSocket(const TcpClient::Ptr& client, string *str)
{
+ FIFO::Ptr fifo = client->GetRecvQueue();
size_t buffer_length = fifo->GetSize();
char *buffer = (char *)fifo->GetReadBuffer();
}
/**
- * Writes data into a FIFO using the netstring format.
+ * Writes data into a TCP client's send buffer using the netstring format.
*
* @param fifo The FIFO.
* @param str The string that is to be written.
*/
-void Netstring::WriteStringToFIFO(FIFO::Ptr fifo, const string& str)
+void Netstring::WriteStringToSocket(const TcpClient::Ptr& client, const string& str)
{
+ FIFO::Ptr fifo = client->GetSendQueue();
+
stringstream prefixbuf;
prefixbuf << str.size() << ":";
fifo->Write(str.c_str(), str.size());
fifo->Write(",", 1);
+
+ client->Flush();
}
{
/**
- * Thrown when an invalid netstring was encountered while reading from a FIFO.
+ * Thrown when an invalid netstring was encountered while reading from a
+ * TCP client.
*
* @ingroup jsonrpc
*/
class I2_JSONRPC_API Netstring
{
public:
- static bool ReadStringFromFIFO(FIFO::Ptr fifo, string *message);
- static void WriteStringToFIFO(FIFO::Ptr fifo, const string& message);
+ static bool ReadStringFromSocket(const TcpClient::Ptr& client, string *message);
+ static void WriteStringToSocket(const TcpClient::Ptr& client, const string& message);
private:
Netstring(void);