Brushing off enough dust to be able to initiate HTTP requests from the server.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4345 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
18128303b6
commit
73bbcebddb
60
core/http.js
Normal file
60
core/http.js
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
function parseUrl(url) {
|
||||||
|
// XXX: Hack.
|
||||||
|
let match = url.match(new RegExp("(\\w+)://([^/]+)?(.*)"));
|
||||||
|
return {
|
||||||
|
protocol: match[1],
|
||||||
|
host: match[2],
|
||||||
|
path: match[3],
|
||||||
|
port: match[1] == "http" ? 80 : 443,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseResponse(data) {
|
||||||
|
let firstLine;
|
||||||
|
let headers = {};
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
let endLine = data.indexOf('\r\n');
|
||||||
|
let line = data.substring(0, endLine);
|
||||||
|
if (!firstLine) {
|
||||||
|
firstLine = line;
|
||||||
|
} else if (!line.length) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
let colon = line.indexOf(":");
|
||||||
|
headers[line.substring(colon)] = line.substring(colon + 1);
|
||||||
|
}
|
||||||
|
data = data.substring(endLine + 2);
|
||||||
|
}
|
||||||
|
return {body: data};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function fetch(url, options) {
|
||||||
|
let parsed = parseUrl(url);
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
let socket = new Socket();
|
||||||
|
let buffer = new Uint8Array(0)
|
||||||
|
|
||||||
|
return socket.connect(parsed.host, parsed.port).then(function() {
|
||||||
|
socket.read(function(data) {
|
||||||
|
if (data) {
|
||||||
|
let newBuffer = new Uint8Array(buffer.length + data.length);
|
||||||
|
newBuffer.set(buffer, 0);
|
||||||
|
newBuffer.set(data, buffer.length);
|
||||||
|
buffer = newBuffer;
|
||||||
|
} else {
|
||||||
|
resolve(parseResponse(utf8Decode(buffer)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (parsed.port == 443) {
|
||||||
|
return socket.startTls();
|
||||||
|
}
|
||||||
|
}).then(function() {
|
||||||
|
socket.write(`${options?.method ?? 'GET'} ${parsed.path} HTTP/1.0\r\nHost: ${parsed.host}\r\nConnection: close\r\n\r\n`);
|
||||||
|
socket.shutdown();
|
||||||
|
}).catch(function(error) {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
@ -2,7 +2,7 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.unprompted.tildefriends"
|
package="com.unprompted.tildefriends"
|
||||||
versionCode="9"
|
versionCode="9"
|
||||||
versionName="0.0.9">
|
versionName="0.0.9-wip">
|
||||||
<uses-sdk android:minSdkVersion="26"/>
|
<uses-sdk android:minSdkVersion="26"/>
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<application android:label="Tilde Friends" android:usesCleartextTraffic="true" android:debuggable="true">
|
<application android:label="Tilde Friends" android:usesCleartextTraffic="true" android:debuggable="true">
|
||||||
|
@ -154,6 +154,7 @@ void tf_tls_session_start_connect(tf_tls_session_t* session)
|
|||||||
X509_VERIFY_PARAM* param = SSL_get0_param(session->ssl);
|
X509_VERIFY_PARAM* param = SSL_get0_param(session->ssl);
|
||||||
X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
|
X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
|
||||||
X509_VERIFY_PARAM_set1_host(param, session->hostname, 0);
|
X509_VERIFY_PARAM_set1_host(param, session->hostname, 0);
|
||||||
|
SSL_set_tlsext_host_name(session->ssl, session->hostname);
|
||||||
SSL_set_bio(session->ssl, session->bio_in, session->bio_out);
|
SSL_set_bio(session->ssl, session->bio_in, session->bio_out);
|
||||||
SSL_connect(session->ssl);
|
SSL_connect(session->ssl);
|
||||||
tf_tls_session_handshake(session);
|
tf_tls_session_handshake(session);
|
||||||
|
Loading…
Reference in New Issue
Block a user