Imported Upstream version 0.8~alpha1
[platform/upstream/syncevolution.git] / src / client-api / src / include / symbian / push / FSocket.h
1 /*
2  * Funambol is a mobile platform developed by Funambol, Inc. 
3  * Copyright (C) 2003 - 2007 Funambol, Inc.
4  * 
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU Affero General Public License version 3 as published by
7  * the Free Software Foundation with the addition of the following permission 
8  * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
9  * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 
10  * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
11  * 
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
15  * details.
16  * 
17  * You should have received a copy of the GNU Affero General Public License 
18  * along with this program; if not, see http://www.gnu.org/licenses or write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20  * MA 02110-1301 USA.
21  * 
22  * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite 
23  * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
24  * 
25  * The interactive user interfaces in modified source and object code versions
26  * of this program must display Appropriate Legal Notices, as required under
27  * Section 5 of the GNU Affero General Public License version 3.
28  * 
29  * In accordance with Section 7(b) of the GNU Affero General Public License
30  * version 3, these Appropriate Legal Notices must retain the display of the
31  * "Powered by Funambol" logo. If the display of the logo is not reasonably 
32  * feasible for technical reasons, the Appropriate Legal Notices must display
33  * the words "Powered by Funambol".
34  */
35
36 #ifndef INCL_FSOCKET
37 #define INCL_FSOCKET
38
39 #include <es_sock.h>
40 #include <in_sock.h>
41 #include "base/fscapi.h"
42 #include "base/util/StringBuffer.h"
43
44 class FSocket {
45     
46 private:
47     
48     RSocketServ             iSocketSession;
49     RSocket                 iSocket;
50     TRequestStatus          iStatus;
51     
52     // used? TODO
53     StringBuffer lAddress;
54     StringBuffer pAddress;
55     static StringBuffer lIP;
56     
57     
58     /**
59      * Opens a socket connecting to the peer host on the given port.
60      */
61     void ConstructL(const StringBuffer& peer, int32_t port);
62     
63     FSocket();
64
65     
66 public:
67     
68     /**
69      * This method is the factory to create sockets
70      * Opens a socket connecting to the peer host on the given port.
71      * @return  a valid object if the connection can be establishd. Returns
72      *          NULL if the socket cannot be created for any reason.
73      */
74     static FSocket* createSocket(const StringBuffer& peer, int32_t port);
75     
76     // 1st and 2nd phase constructors
77     static FSocket* NewL (const StringBuffer& peer, int32_t port);
78     static FSocket* NewLC(const StringBuffer& peer, int32_t port);
79     
80     virtual ~FSocket();
81     
82
83     /**
84      Returns the local address associates to this socket in the form
85      'address:port' where address can be either the numerical IP or the
86      symbolic name
87     */
88     const StringBuffer& address() const;
89     /**
90      Returns the local address associates to this socket in the form
91      'address:port' where address can be either the numerical IP or the
92      symbolic name
93     */
94     const StringBuffer& peerAddress() const;
95
96     /**
97      Reads all available bytes from the socket, up to the maximum specified 
98      by the second parameter. This call is synchronous and it blocks the
99      caller until something is available or the max length is reached.
100      Returns the actual number of bytes read (-1 if the socket cannot be
101      read or in case of any network error).
102     */
103     int32_t readBuffer(int8_t* buffer, int32_t maxLen);
104
105     /**
106      Writes the given buffer to the stream and flush it. The buffer length
107      is specified by the second parameter.
108      The method returns the number of written bytes. On success this value
109      is the same as len. On errors it can be less than len and it specifies 
110      the number of bytes written before a network error was encountered.
111     */
112     int32_t writeBuffer(const int8_t* const buffer, int32_t len);
113
114     /**
115      Close this socket. After this operation the object can be released as
116      any IO operation is invalid.
117     */
118     void close();
119     
120     /// Returns the status of last operation.
121     TInt getLastStatus() { return iStatus.Int(); }
122
123
124
125     // These methods are misc utilities
126
127     /**
128      Returns a string representing the local address in the form:
129      'address' where address can be the numerical IP or the symbolic
130      name. If the address cannot be retrieved, then the returned string is
131      empty.
132      If the device is not connected to the network then this method returns
133      an empty string and it does not attempt to set up a network
134      connection.
135     */
136     static const StringBuffer& localIP();
137     
138     static void startConnection();
139
140 };
141 #endif