1 /* 2 * Copyright 2011, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __GLTRACE_TRANSPORT_H_ 18 #define __GLTRACE_TRANSPORT_H_ 19 20 #include <pthread.h> 21 22 #include "gltrace.pb.h" 23 24 namespace android { 25 namespace gltrace { 26 27 /** 28 * TCPStream provides a TCP based communication channel from the device to 29 * the host for transferring GLMessages. 30 */ 31 class TCPStream { 32 int mSocket; 33 pthread_mutex_t mSocketWriteMutex; 34 public: 35 /** Create a TCP based communication channel over @socket */ 36 TCPStream(int socket); 37 ~TCPStream(); 38 39 /** Close the channel. */ 40 void closeStream(); 41 42 /** Send @data of size @len to host. . Returns -1 on error, 0 on success. */ 43 int send(void *data, size_t len); 44 45 /** 46 * Receive @len bytes of data into @buf from the remote end. This is a blocking call. 47 * Returns -1 on failure, 0 on success. 48 */ 49 int receive(void *buf, size_t len); 50 }; 51 52 /** 53 * BufferedOutputStream provides buffering of data sent to the underlying 54 * unbuffered channel. 55 */ 56 class BufferedOutputStream { 57 TCPStream *mStream; 58 59 size_t mBufferSize; 60 std::string mStringBuffer; 61 62 /** Enqueue message into internal buffer. */ 63 void enqueueMessage(GLMessage *msg); 64 public: 65 /** 66 * Construct a Buffered stream of size @bufferSize, using @stream as 67 * its underlying channel for transport. 68 */ 69 BufferedOutputStream(TCPStream *stream, size_t bufferSize); 70 71 /** 72 * Send @msg. The message could be buffered and sent later with a 73 * subsequent message. Returns -1 on error, 0 on success. 74 */ 75 int send(GLMessage *msg); 76 77 /** Send any buffered messages, returns -1 on error, 0 on success. */ 78 int flush(); 79 }; 80 81 /** 82 * Utility method: start a server listening at @sockName (unix domain socket, 83 * abstract namespace path), and wait for a client connection. 84 * Returns the connected client socket on success, or -1 on failure. 85 */ 86 int acceptClientConnection(char *sockName); 87 88 }; 89 }; 90 91 #endif 92