1 // it is depending on Datajs.js and httpsproxy.js
2 /*
3 * Sybase Hybrid App version 2.3.4
4 * Sybase datajs integration with PhoneGap HTTPS proxy
5 *
6 * datajs-https-proxy.js
7 * This file will not be regenerated, so it is possible to modify it, but it
8 * is not recommended.
9 *
10 * Copyright (c) 2013 Sybase Inc. All rights reserved.
11 */
12
13
14 /**
15 * The namespace for HTTP(S) proxy
16 * @namespace
17 */
18 HttpsConnection = (typeof HttpsConnection === "undefined" || !HttpsConnection) ? {} : HttpsConnection; // 'namespace'
19
20 (function(HttpsConnection, window, undefined) {
21
22 /**
23 * Generate an OData HttpClient object over https proxy of native platform.
24 *
25 * This object will re-direct all odata request to the http proxy because even with HTTP connection, there are
26 * are some known issue by default setting since the application in device is cross server accessing the odata service.
27 * See: http://datajs.codeplex.com/discussions/396112 for details of the issue.
28 *
29 * Call this method normally on HTML page load event to replace the default odata HTTP client.
30 * @memberOf HttpsConnection
31 * @public
32 * @example
33 * // Call datajs api without certificate, users could call just as normal by passing
34 * // URL as first argument
35 * var length = 0;
36 * var updateUri = server + "/example.svc/Categories(1)";
37 *
38 * OData.read(server + "/example.svc/Categories",
39 * function (data, response) {
40 * alert("length " + data.results.length);
41 * length = data.results.length;
42 * if ( length > 0 )
43 * {
44 * var updateRequest = {
45 * requestUri: updateUri,
46 * method: "PUT",
47 * data:
48 * {
49 * Picture: new Date().getTime(),
50 * Description: "Update Record",
51 * CategoryName: "Updated Category",
52 * CategoryID: 1
53 * }
54 * };
55 *
56 * OData.request(updateRequest,
57 * function (data, response) {
58 * alert("Response " + JSON.stringify(response));
59 * },
60 * function (err) {
61 * alert("Error occurred " + err.message);
62 * }
63 * );
64 * };
65 * },
66 * function (err) {
67 * alert("Error occurred " + err.message);
68 * });
69 *
70 * // However, to specify certificate source in the method call, users need to pass in
71 * // the request object instead of URL,
72 * // and add the field "certificateSource" to the request object.
73 * var length = 0;
74 * var updateUri = server + "/example.svc/Categories(1)";
75 *
76 * OData.read({ requestUri: server + "/example.svc/Categories", certificateSource : cert},
77 * function (data, response) {
78 * alert("length " + data.results.length);
79 * length = data.results.length;
80 * if ( length > 0 )
81 * {
82 * var updateRequest = {
83 * requestUri: updateUri,
84 * certificateSource : cert,
85 * method: "PUT",
86 * data:
87 * {
88 * Picture: new Date().getTime(),
89 * Description: "Update Record",
90 * CategoryName: "Updated Category",
91 * CategoryID: 1
92 * }
93 * };
94 *
95 * OData.request(updateRequest,
96 * function (data, response) {
97 * alert("Response " + JSON.stringify(response));
98 * },
99 * function (err) {
100 * alert("Error occurred " + err.message);
101 * }
102 * );
103 * };
104 * },
105 * function (err) {
106 * alert("Error occurred " + err.message);
107 * });
108 */
109 HttpsConnection.generateODataHttpClient = function () {
110 if ( HttpsConnection.sendRequest && !OData.defaultHttpClient.HttpsConnectionWrapper) {
111 OData.defaultHttpClient = {
112 HttpsConnectionWrapper: true,
113 request: function (request, success, error) {
114 var url, requestHeaders, requestBody, statusCode, statusText, responseHeaders;
115 var responseBody, requestTimeout, requestUserName, requestPassword, requestCertificate;
116 var client, result;
117
118 url = request.requestUri;
119 requestHeaders = request.headers;
120 requestBody = request.body;
121
122 var successCB = function( data ) {
123 var response = {
124 requestUri: url,
125 statusCode: data.status,
126 statusText: data.status,
127 headers: data.headers,
128 body: (data.responseText ? data.responseText : data.responseBase64)
129 };
130
131 if (response.statusCode >= 200 && response.statusCode <= 299) {
132 if ( success ) {
133 success(response);
134 }
135 } else {
136 if ( error ) {
137 error({ message: "HTTP request failed", request: request, response: response });
138 }
139 }
140 };
141
142 var errorCB = function( data ) {
143 if ( error ) {
144 error({message: data});
145 }
146 };
147
148 if ( request.timeoutMS ) {
149 requestTimeout = request.timeoutMS / 1000;
150 }
151
152 if ( request.certificateSource ) {
153 requestCertificate = request.certificateSource;
154 }
155
156 if ( request.user ) {
157 requestUserName = request.user;
158 }
159
160 if ( request.password ) {
161 requestPassword = request.password;
162 }
163
164 client = HttpsConnection.sendRequest(request.method || "GET", url, requestHeaders, requestBody, successCB, errorCB, requestUserName, requestPassword, requestTimeout, requestCertificate );
165
166 result = {};
167 result.abort = function () {
168 client.abort();
169
170 if ( error ) {
171 error({ message: "Request aborted" });
172 }
173 };
174 return result;
175 }
176 };
177 }
178 };
179
180 })(HttpsConnection, window);
181