156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall/*
256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Copyright (C) 2011 The Android Open Source Project
356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*
456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Licensed under the Apache License, Version 2.0 (the "License");
556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* you may not use this file except in compliance with the License.
656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* You may obtain a copy of the License at
756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*
856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* http://www.apache.org/licenses/LICENSE-2.0
956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*
1056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Unless required by applicable law or agreed to in writing, software
1156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* distributed under the License is distributed on an "AS IS" BASIS,
1256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* See the License for the specific language governing permissions and
1456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* limitations under the License.
1556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*/
1656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#ifndef __SOCKET_STREAM_H
1756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define __SOCKET_STREAM_H
1856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
1956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <stdlib.h>
2056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "IOStream.h"
2156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
2256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallclass SocketStream : public IOStream {
2356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallpublic:
2456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    typedef enum { ERR_INVALID_SOCKET = -1000 } SocketStreamError;
2556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
2656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    explicit SocketStream(size_t bufsize = 10000);
2756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual ~SocketStream();
2856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
2956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual int listen(unsigned short port) = 0;
3056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual SocketStream *accept() = 0;
3156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual int connect(unsigned short port) = 0;
3256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
3356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual void *allocBuffer(size_t minSize);
3456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual int commitBuffer(size_t size);
3556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual const unsigned char *readFully(void *buf, size_t len);
3656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual const unsigned char *read(void *buf, size_t *inout_len);
3756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
3856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    bool valid() { return m_sock >= 0; }
3956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual int recv(void *buf, size_t len);
4056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    virtual int writeFully(const void *buf, size_t len);
4156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
4256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallprotected:
4356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    int            m_sock;
4456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    size_t         m_bufsize;
4556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    unsigned char *m_buf;
4656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
4756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    SocketStream(int sock, size_t bufSize);
4856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall};
4956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
5056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#endif /* __SOCKET_STREAM_H */
51