|
Hi Vadim! The patch regarding "Issue 2" described below follows attached, can you please have a look on it ? I've tested both conditions here (with and without callback methods registrated) and I had no problems. Please let me know whether you have any comments and/or disagreements. Thanks and best regards, Mauro. Vadim Lebedev escreveu: Mauro, --
|
diff -r b9d37dbd4b26 wifo/owsl/src/protocols/owsl_uoh.c
--- a/wifo/owsl/src/protocols/owsl_uoh.c Mon May 25 11:54:53 2009 +0200
+++ b/wifo/owsl/src/protocols/owsl_uoh.c Mon Jun 15 16:27:10 2009 -0300
@@ -433,8 +433,23 @@
char query[512];
char buff[2048];
int nbytes;
+ OWSLHttpRequestFormatters* http_request_formatters =
owsl_get_http_request_formatters();
- snprintf(query, sizeof(query), HTTP_REQUEST_STR, ip_addr, port);
+ if ( (http_request_formatters != NULL) &&
+ (http_request_formatters->uoh_connect_formatter !=
NULL) )
+ {
+ nbytes = http_request_formatters->uoh_connect_formatter(
+ query, sizeof(query), (OWSLSocketInfo*)sock,
ip_addr, port);
+ }
+ else
+ {
+ nbytes = snprintf(query, sizeof(query), HTTP_REQUEST_STR,
ip_addr, port);
+ }
+
+ if (nbytes <= 0)
+ {
+ return -1;
+ }
nbytes = send(sock->system_socket, query, (int) strlen(query),
MSG_NOSIGNAL);
if (nbytes <= 0)
diff -r b9d37dbd4b26 wifo/owsl/src/protocols/owsl_uoh_common.c
--- a/wifo/owsl/src/protocols/owsl_uoh_common.c Mon May 25 11:54:53 2009 +0200
+++ b/wifo/owsl/src/protocols/owsl_uoh_common.c Mon Jun 15 16:27:10 2009 -0300
@@ -24,6 +24,9 @@
#include "owsl_base.h"
#include "owsl_uoh_common.h"
+
+static OWSLHttpRequestFormatters* owsl_http_request_formatters = NULL;
+
/* ******************************************************** */
/* Configuration Parameters management */
@@ -127,3 +130,19 @@
return 0;
}
+
+
+/* ******************************************************** */
+/* HTTP Header Modifier Callbacks */
+/* ******************************************************** */
+
+void owsl_set_http_request_formatters(OWSLHttpRequestFormatters*
owslHttpRequestFormatters)
+{
+ owsl_http_request_formatters = owslHttpRequestFormatters;
+}
+
+OWSLHttpRequestFormatters* owsl_get_http_request_formatters()
+{
+ return owsl_http_request_formatters;
+}
+
diff -r b9d37dbd4b26 wifo/owsl/src/protocols/owsl_uoh_common.h
--- a/wifo/owsl/src/protocols/owsl_uoh_common.h Mon May 25 11:54:53 2009 +0200
+++ b/wifo/owsl/src/protocols/owsl_uoh_common.h Mon Jun 15 16:27:10 2009 -0300
@@ -93,3 +93,43 @@
int owsl_uoh_common_parameter_set(const OWSLParamKey_UoH *OWSLParamKeyList_UoH,
const char * name, const void * value,
struct OWList * list);
+
+/* ******************************************************** */
+/* HTTP Header Modifier Callbacks */
+/* ******************************************************** */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+struct _OWSLHttpRequestFormatters
+{
+ /*
+ * Place the formatted HTTP content needed to establish the HTTP
connection
+ * with the tunnel server on "connect_headers" and returns the final
size of
+ * this content.
+ */
+ int (*uoh_connect_formatter)(char* connect_headers, int
connect_headers_size,
+ OWSLSocketInfo* socket_info, const char*
remote_server_address,
+ unsigned short remote_server_port);
+
+ /*
+ * Place the formatted HTTP content needed to establish the HTTP
connection
+ * with the tunnel server on "connect_headers" and returns the final
size of
+ * this content.
+ */
+ int (*uohs_connect_formatter)(char* connect_headers, int
connect_headers_size,
+ OWSLSocketInfo* socket_info, const char*
remote_server_address,
+ unsigned short remote_server_port);
+};
+
+typedef struct _OWSLHttpRequestFormatters OWSLHttpRequestFormatters;
+
+void owsl_set_http_request_formatters(OWSLHttpRequestFormatters*
owslHttpRequestFormatters);
+
+OWSLHttpRequestFormatters* owsl_get_http_request_formatters();
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
diff -r b9d37dbd4b26 wifo/owsl/src/protocols/owsl_uohs.c
--- a/wifo/owsl/src/protocols/owsl_uohs.c Mon May 25 11:54:53 2009 +0200
+++ b/wifo/owsl/src/protocols/owsl_uohs.c Mon Jun 15 16:27:10 2009 -0300
@@ -451,8 +451,23 @@
char query[512];
char buff[2048];
int nbytes;
+ OWSLHttpRequestFormatters* http_request_formatters =
owsl_get_http_request_formatters();
- snprintf(query, sizeof(query), HTTP_REQUEST_STR, ip_addr, port);
+ if ( (http_request_formatters != NULL) &&
+ (http_request_formatters->uohs_connect_formatter !=
NULL) )
+ {
+ nbytes = http_request_formatters->uohs_connect_formatter(
+ query, sizeof(query), (OWSLSocketInfo*)sock,
ip_addr, port);
+ }
+ else
+ {
+ nbytes = snprintf(query, sizeof(query), HTTP_REQUEST_STR,
ip_addr, port);
+ }
+
+ if (nbytes <= 0)
+ {
+ return -1;
+ }
nbytes = SSL_write(sock->ssl_handle, query, (int) strlen(query));
if (nbytes <= 0)
_______________________________________________ QuteCom-dev mailing list [email protected] http://lists.qutecom.org/mailman/listinfo/qutecom-dev
