00001 /* 00002 * Funambol is a mobile platform developed by Funambol, Inc. 00003 * Copyright (C) 2003 - 2007 Funambol, Inc. 00004 * 00005 * This program is free software; you can redistribute it and/or modify it under 00006 * the terms of the GNU Affero General Public License version 3 as published by 00007 * the Free Software Foundation with the addition of the following permission 00008 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED 00009 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 00010 * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. 00011 * 00012 * This program is distributed in the hope that it will be useful, but WITHOUT 00013 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00014 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 00015 * details. 00016 * 00017 * You should have received a copy of the GNU Affero General Public License 00018 * along with this program; if not, see http://www.gnu.org/licenses or write to 00019 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 00020 * MA 02110-1301 USA. 00021 * 00022 * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite 00023 * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com. 00024 * 00025 * The interactive user interfaces in modified source and object code versions 00026 * of this program must display Appropriate Legal Notices, as required under 00027 * Section 5 of the GNU Affero General Public License version 3. 00028 * 00029 * In accordance with Section 7(b) of the GNU Affero General Public License 00030 * version 3, these Appropriate Legal Notices must retain the display of the 00031 * "Powered by Funambol" logo. If the display of the logo is not reasonably 00032 * feasible for technical reasons, the Appropriate Legal Notices must display 00033 * the words "Powered by Funambol". 00034 */ 00035 00036 #ifndef INCL_TRANSPORT_AGENT 00037 #define INCL_TRANSPORT_AGENT 00038 /** @cond DEV */ 00039 00040 #include "base/fscapi.h" 00041 #include "base/util/StringBuffer.h" 00042 00043 #include "http/URL.h" 00044 #include "http/Proxy.h" 00045 00046 // 00047 // number of seconds of waiting response timeout. 00048 // 00049 #define DEFAULT_MAX_TIMEOUT 300 00050 00051 // 00052 // The max_msg_size parameter. Default is 512k. 00053 // The value is expressed in byte 00054 // 00055 #define DEFAULT_MAX_MSG_SIZE 512000 00056 00057 // 00058 // This is the default value for the size of the buffer used to store the 00059 // incoming stram from server. It is expressed in byte 00060 // 00061 #define DEFAULT_INTERNET_READ_BUFFER_SIZE 4096 00062 #include "base/globalsdef.h" 00063 00064 BEGIN_NAMESPACE 00065 00066 /* 00067 * This class is the transport agent responsible for messages exchange 00068 * over an HTTP connection. 00069 * This is a generic abtract class which is not bound to any paltform 00070 */ 00071 00072 class TransportAgent { 00073 00074 protected: 00075 URL url; 00076 Proxy proxy; 00077 00078 unsigned int timeout; 00079 unsigned int maxmsgsize; 00080 unsigned int readBufferSize; 00081 char userAgent[128]; 00082 bool compression; 00083 StringBuffer SSLServerCertificates; 00084 bool SSLVerifyServer; 00085 bool SSLVerifyHost; 00086 00087 public: 00088 TransportAgent(); 00089 TransportAgent(URL& url, 00090 Proxy& proxy, 00091 unsigned int responseTimeout = DEFAULT_MAX_TIMEOUT, 00092 unsigned int maxmsgsize = DEFAULT_MAX_MSG_SIZE); 00093 00094 virtual ~TransportAgent(); 00095 00096 /* 00097 * Change the URL the subsequent calls to setMessage() should 00098 * use as target url. 00099 * 00100 * @param url the new target url 00101 */ 00102 virtual void setURL(URL& newURL); 00103 00104 /* 00105 * Returns the url. 00106 */ 00107 virtual URL& getURL(); 00108 00109 /** 00110 * Sets the connection timeout 00111 * 00112 * @param t the new timeout in seconds 00113 */ 00114 virtual void setTimeout(unsigned int t); 00115 00116 /** 00117 * Returns the connection timeout 00118 */ 00119 virtual unsigned int getTimeout(); 00120 00121 /** 00122 * Sets the max msg size 00123 * 00124 * @param t the new msx msg size in bytes 00125 */ 00126 virtual void setMaxMsgSize(unsigned int t); 00127 00128 /** 00129 * Returns the max msg size 00130 */ 00131 virtual unsigned int getMaxMsgSize(); 00132 00133 /** 00134 * Sets the buffer size 00135 * 00136 * @param t the buffer size size in bytes 00137 */ 00138 virtual void setReadBufferSize(unsigned int t); 00139 00140 virtual void setUserAgent(const char* ua); 00141 00142 virtual void setCompression(bool newCompression); 00143 virtual bool getCompression(); 00144 00145 virtual const char* getUserAgent(); 00146 00147 /** 00148 * Returns the buffer size 00149 */ 00150 virtual unsigned int getReadBufferSize(); 00151 00152 /** 00153 * A platform specific string specifying the location of the 00154 * certificates used to authenticate the server. When empty, the 00155 * system's default location will be searched. 00156 */ 00157 virtual const char* getSSLServerCertificates() const { return SSLServerCertificates.c_str(); } 00158 virtual void setSSLServerCertificates(const char *value) { SSLServerCertificates = value ? value : ""; } 00159 00160 /** 00161 * Enabled by default: the client refuses to establish the 00162 * connection unless the server presents a valid 00163 * certificate. Disabling this option considerably reduces the 00164 * security of SSL (man-in-the-middle attacks become possible) and 00165 * is not recommended. 00166 */ 00167 virtual bool getSSLVerifyServer() const { return SSLVerifyServer; } 00168 virtual void setSSLVerifyServer(bool value) { SSLVerifyServer = value; } 00169 00170 /** 00171 * Enabled by default: the client refuses to establish the 00172 * connection unless the server's certificate matches its host 00173 * name. In cases where the certificate still seems to be valid it 00174 * might make sense to disable this option and allow such 00175 * connections. 00176 */ 00177 virtual bool getSSLVerifyHost() const { return SSLVerifyHost; } 00178 virtual void setSSLVerifyHost(bool value) { SSLVerifyHost = value; } 00179 00180 /* 00181 * Sends the given SyncML message to the server specified 00182 * by the install property 'url'. Returns the server's response. 00183 * The response string has to be freed with delete []. 00184 * In case of an error, NULL is returned and lastErrorCode/Msg 00185 * is set. 00186 */ 00187 virtual char* sendMessage(const char* msg) = 0; 00188 00189 }; 00190 00191 00192 END_NAMESPACE 00193 00194 /** @endcond */ 00195 #endif