From e440532c58d2f04ab6a487da08b2d6e9034eb831 Mon Sep 17 00:00:00 2001 From: Gabor Adam Toth Date: Wed, 24 Aug 2011 11:11:56 +0200 Subject: [PATCH 1/2] change load params for identica too --- world/net/identica/client.c | 4 ++-- world/net/twitter/client.c | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/world/net/identica/client.c b/world/net/identica/client.c index 11a118d..16e8d2b 100644 --- a/world/net/identica/client.c +++ b/world/net/identica/client.c @@ -9,7 +9,7 @@ inherit NET_PATH "twitter/client"; -object load(object usr, string key, string secret, string request, string access, string authorize) { +object load(object usr, mapping opts) { name = "identica"; display_name = "identi.ca"; api_base_url = "http://identi.ca/api"; @@ -20,5 +20,5 @@ object load(object usr, string key, string secret, string request, string access access_token_url = api_base_url + "/oauth/access_token"; authorize_url = api_base_url + "/oauth/authorize"; - return ::load(usr, key, secret, request, access, authorize); + return ::load(usr, opts); } diff --git a/world/net/twitter/client.c b/world/net/twitter/client.c index fd963a1..7024dbb 100644 --- a/world/net/twitter/client.c +++ b/world/net/twitter/client.c @@ -28,6 +28,8 @@ persistent mixed lastid; volatile string api_url = "https://api.twitter.com/1"; volatile string userstream_url = "https://userstream.twitter.com/2"; +volatile string name = "twitter"; +volatile string display_name = "twitter"; volatile int status_max_len = 140; volatile int send_to_user = 0; @@ -72,7 +74,7 @@ object load(object usr, mapping opts) { void check_status_update(string body, string headers, int http_status) { P3(("twitter/client:parse_status_update(%O, %O, %O)\n", body, headers, http_status)) if (http_status != R_OK) - sendmsg(user, "_failure_update_twitter", "Unable to post status update on twitter."); + sendmsg(user, "_failure_update_"+ name, "Unable to post status update on [_name].", (["_name": display_name])); } void status_update(string text) { From 595ce50f5c58363db878c10eb7448e24103b73d2 Mon Sep 17 00:00:00 2001 From: Gabor Adam Toth Date: Wed, 24 Aug 2011 11:33:04 +0200 Subject: [PATCH 2/2] http/fetch: added stream param --- world/net/http/fetch.c | 25 +++++++++++++++----- world/net/http/fetch_stream.c | 44 ----------------------------------- world/net/http/oauth.c | 4 ++-- world/net/twitter/client.c | 4 ++-- 4 files changed, 23 insertions(+), 54 deletions(-) delete mode 100644 world/net/http/fetch_stream.c diff --git a/world/net/http/fetch.c b/world/net/http/fetch.c index 47eeade..043754c 100644 --- a/world/net/http/fetch.c +++ b/world/net/http/fetch.c @@ -30,6 +30,7 @@ volatile string http_message; volatile int http_status, port, fetching, ssl; volatile string buffer, thehost, url, fetched, host, resource, method; volatile mixed rbody; +volatile int stream; int parse_status(string all); int parse_header(string all); @@ -37,9 +38,10 @@ int buffer_content(string all); string qHost() { return thehost; } -varargs void fetch(string murl, string meth, mixed body, mapping hdrs) { +varargs void fetch(string murl, string meth, mixed body, mapping hdrs, int strm) { method = meth || "GET"; rbody = body; + stream = strm; if (hdrs) rheaders += hdrs; if (url != murl) { // accept.c does this for us: @@ -183,9 +185,16 @@ int parse_header(string all) { return 1; } -int buffer_content(string all) { - P2(("%O body %O\n", ME, all)) - buffer += all + "\n"; +int buffer_content(string data) { + P2(("%O body %O\n", ME, data)) + if (stream) { + mixed *waiter; + foreach (waiter : qToArray(ME)) { + funcall(waiter[0], data, waiter[1] ? fheaders : copy(fheaders), http_status, 1); + } + } else { + buffer += data + "\n"; + } next_input_to(#'buffer_content); return 1; } @@ -198,8 +207,12 @@ disconnected(remainder) { //if (headers["etag"]) // rheaders["if-none-match"] = headers["etag"]; // heise does not work with etag - fetched = buffer; - if (remainder) fetched += remainder; + if (stream) { + fetched = remainder; + } else { + fetched = buffer; + if (remainder) fetched += remainder; + } fheaders = headers; buffer = headers = 0; switch (http_status) { diff --git a/world/net/http/fetch_stream.c b/world/net/http/fetch_stream.c deleted file mode 100644 index e406bf9..0000000 --- a/world/net/http/fetch_stream.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include - -inherit NET_PATH "http/fetch"; - -int buffer_content(string data) { - P2(("%O got data:\n%O\n", ME, data)) - - mixed *waiter; - foreach (waiter : qToArray(ME)) { - funcall(waiter[0], data, waiter[1] ? fheaders : copy(fheaders), http_status, 1); - } - next_input_to(#'buffer_content); //' - return 1; -} - -disconnected(string data) { - P2(("%O got disconnected:\n%O\n", ME, data)) - headers["_fetchtime"] = isotime(ctime(time()), 1); - if (headers["last-modified"]) - rheaders["if-modified-since"] = headers["last-modified"]; - //if (headers["etag"]) - // rheaders["if-none-match"] = headers["etag"]; // heise does not work with etag - - fheaders = headers; - buffer = headers = 0; - switch (http_status) { - default: - mixed *waiter; - while (qSize(ME)) { - waiter = shift(ME); - P2(("%O calls back.. body is %O\n", ME, data)) - funcall(waiter[0], data, waiter[1] ? fheaders : copy(fheaders), http_status, 0); - } - if (http_status == R_OK) break; - // doesn't seem to get here when HTTP returns 301 or 302. strange. - // fall thru - case R_NOTMODIFIED: - qDel(ME); - qInit(ME, 150, 5); - } - fetching = 0; - return 1; // presume this disc was expected -} diff --git a/world/net/http/oauth.c b/world/net/http/oauth.c index 751477a..cbeb716 100644 --- a/world/net/http/oauth.c +++ b/world/net/http/oauth.c @@ -25,7 +25,7 @@ volatile int authorized = 0; oauth_success() {} oauth_error() {} -varargs void fetch(object ua, string url, string method, mapping post, mapping oauth) { +varargs void fetch(object ua, string url, string method, mapping post, mapping oauth, int stream) { P3((">> oauth:fetch(%O, %O, %O)\n", url, method, oauth)) unless (method) method = "GET"; unless (post) post = ([]); @@ -53,7 +53,7 @@ varargs void fetch(object ua, string url, string method, mapping post, mapping o foreach (string key, string value : oauth) p += (strlen(p) ? "," : "") + key + "=\"" + urlencode(to_string(value)) + "\""; - ua->fetch(url, method, post, (["authorization": "OAuth " + p])); + ua->fetch(url, method, post, (["authorization": "OAuth " + p]), stream); } void parse_request_token(string body, mapping headers, int http_status) { diff --git a/world/net/twitter/client.c b/world/net/twitter/client.c index 7024dbb..b8a00da 100644 --- a/world/net/twitter/client.c +++ b/world/net/twitter/client.c @@ -250,9 +250,9 @@ user_stream() { P3(("twitter/client:user_stream()\n")) if (!authorized) return enqueue(ME, ({ #'user_stream })); //'})); friends = 0; - object user_ua = clone_object(NET_PATH "http/fetch_stream"); + object user_ua = clone_object(NET_PATH "http/fetch"); user_ua->content(#'user_stream_data, 1, 1); //'); - fetch(user_ua, userstream_url + "/user.json"); + fetch(user_ua, userstream_url + "/user.json", "GET", 0, 0, 1); } oauth_success() {