Add a utility function to send a code + binary msg

Add a utility function to SocketClient to send a c-string code
prepended to a binary message. This is necessary to be able to
send a binary message while keeping compatible with underlying
text-based protocol.

Change-Id: Ifc6562003a687577d7deb50260533a5147ae4f97
diff --git a/include/sysutils/SocketClient.h b/include/sysutils/SocketClient.h
index 65a5b1b..a298f25 100644
--- a/include/sysutils/SocketClient.h
+++ b/include/sysutils/SocketClient.h
@@ -45,7 +45,18 @@
     int sendMsg(int code, const char *msg, bool addErrno);
     int sendMsg(int code, const char *msg, bool addErrno, bool useCmdNum);
 
-    //Sending binary data:
+    // Provides a mechanism to send a response code to the client. The message uses
+    // the same format as in sendMsg method above.
+    // Sends the code, a space, and a null character.
+    int sendCode(int code);
+
+    // Provides a mechanism to send binary data to client. The message uses the
+    // same format as in sendMsg method above.
+    // Sends the code, a space, and a null character, followed by 4 bytes of
+    // big-endian length, and the data.
+    int sendBinaryMsg(int code, const void *data, int len);
+
+    // Sending binary data:
     int sendData(const void *data, int len);
 
     // Optional reference counting.  Reference count starts at 1.  If
@@ -59,6 +70,12 @@
     // Send null-terminated C strings
     int sendMsg(const char *msg);
     void init(int socket, bool owned, bool useCmdNum);
+
+    // Sending binary data. The caller should use make sure this is protected
+    // from multiple threads entering simultaneously.
+    // returns 0 if successful, -1 if there is a 0 byte write and -2 if any other
+    // error occurred (use errno to get the error)
+    int sendDataLocked(const void *data, int len);
 };
 
 typedef android::sysutils::List<SocketClient *> SocketClientCollection;