Introduction
Introduction Statistics Contact Development Disclaimer Help
tApplying the cookie patch of Carlos Pita. Thank you! - surf - customized build…
git clone git://src.adamsgaard.dk/surf
Log
Files
Refs
README
LICENSE
---
commit 3058d5bf63bf889d960c1f8accfc856568bf3e4c
parent 5703683638bba566029f4061c1c057b33f5c47c9
Author: Christoph Lohmann <[email protected]>
Date: Tue, 16 Oct 2012 21:54:37 +0200
Applying the cookie patch of Carlos Pita. Thank you!
Diffstat:
M surf.c | 122 ++++++++++++++++-------------…
1 file changed, 63 insertions(+), 59 deletions(-)
---
diff --git a/surf.c b/surf.c
t@@ -21,6 +21,8 @@
#include <sys/file.h>
#define LENGTH(x) (sizeof x / sizeof x[0])
+#define COOKIEJAR_TYPE (cookiejar_get_type ())
+#define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_…
enum { AtomFind, AtomGo, AtomUri, AtomLast };
t@@ -55,6 +57,17 @@ typedef struct {
const Arg arg;
} Key;
+typedef struct {
+ SoupCookieJarText parent_instance;
+ int lock;
+} CookieJar;
+
+typedef struct {
+ SoupCookieJarTextClass parent_class;
+} CookieJarClass;
+
+G_DEFINE_TYPE(CookieJar, cookiejar, SOUP_TYPE_COOKIE_JAR_TEXT)
+
static Display *dpy;
static Atom atoms[AtomLast];
static Client *clients = NULL;
t@@ -68,6 +81,10 @@ static char *buildpath(const char *path);
static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, GList *gl…
static void cleanup(void);
static void clipboard(Client *c, const Arg *arg);
+static void cookiejar_changed(SoupCookieJar *self, SoupCookie *old_cookie, Sou…
+static void cookiejar_finalize(GObject *self);
+static SoupCookieJar *cookiejar_new(const char *filename, gboolean read_only);
+static void cookiejar_set_property(GObject *self, guint prop_id, const GValue …
static char *copystr(char **str, const char *src);
static WebKitWebView *createwindow(WebKitWebView *v, WebKitWebFrame *f, Client…
static gboolean decidedownload(WebKitWebView *v, WebKitWebFrame *f, WebKitNetw…
t@@ -79,9 +96,7 @@ static void drawindicator(Client *c);
static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c);
static void find(Client *c, const Arg *arg);
static const char *getatom(Client *c, int a);
-static const char *getcookies(SoupURI *uri);
static char *geturi(Client *c);
-void gotheaders(SoupMessage *msg, gpointer user_data);
static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c);
static void linkhover(WebKitWebView *v, const char* t, const char* l, Client *…
t@@ -90,7 +105,6 @@ static void loaduri(Client *c, const Arg *arg);
static void navigate(Client *c, const Arg *arg);
static Client *newclient(void);
static void newwindow(Client *c, const Arg *arg, gboolean noembed);
-static void newrequest(SoupSession *s, SoupMessage *msg, gpointer v);
static void pasteuri(GtkClipboard *clipboard, const char *text, gpointer d);
static void populatepopup(WebKitWebView *web, GtkMenu *menu, Client *c);
static void popupactivate(GtkMenuItem *menu, Client *);
t@@ -102,7 +116,6 @@ static void scroll_h(Client *c, const Arg *arg);
static void scroll_v(Client *c, const Arg *arg);
static void scroll(GtkAdjustment *a, const Arg *arg);
static void setatom(Client *c, int a, const char *v);
-static void setcookie(SoupCookie *c);
static void setup(void);
static void sigchld(int unused);
static void source(Client *c, const Arg *arg);
t@@ -169,6 +182,49 @@ cleanup(void) {
g_free(stylefile);
}
+static void
+cookiejar_changed(SoupCookieJar *self, SoupCookie *old_cookie, SoupCookie *new…
+ flock(COOKIEJAR(self)->lock, LOCK_EX);
+ if(new_cookie && !new_cookie->expires && sessiontime)
+ soup_cookie_set_expires(new_cookie, soup_date_new_from_now(ses…
+ SOUP_COOKIE_JAR_CLASS(cookiejar_parent_class)->changed(self, old_cooki…
+ flock(COOKIEJAR(self)->lock, LOCK_UN);
+}
+
+static void
+cookiejar_class_init(CookieJarClass *klass) {
+ SOUP_COOKIE_JAR_CLASS(klass)->changed = cookiejar_changed;
+ G_OBJECT_CLASS(klass)->get_property = G_OBJECT_CLASS(cookiejar_parent_…
+ G_OBJECT_CLASS(klass)->set_property = cookiejar_set_property;
+ G_OBJECT_CLASS(klass)->finalize = cookiejar_finalize;
+ g_object_class_override_property(G_OBJECT_CLASS(klass), 1, "filename");
+}
+
+static void
+cookiejar_finalize(GObject *self) {
+ close(COOKIEJAR(self)->lock);
+ G_OBJECT_CLASS(cookiejar_parent_class)->finalize(self);
+}
+
+static void
+cookiejar_init(CookieJar *self) {
+ self->lock = open(cookiefile, 0);
+}
+
+static SoupCookieJar *
+cookiejar_new(const char *filename, gboolean read_only) {
+ return g_object_new(COOKIEJAR_TYPE,
+ SOUP_COOKIE_JAR_TEXT_FILENAME, filename,
+ SOUP_COOKIE_JAR_READ_ONLY, read_only, NULL);
+}
+
+static void
+cookiejar_set_property(GObject *self, guint prop_id, const GValue *value, GPar…
+ flock(COOKIEJAR(self)->lock, LOCK_SH);
+ G_OBJECT_CLASS(cookiejar_parent_class)->set_property(self, prop_id, va…
+ flock(COOKIEJAR(self)->lock, LOCK_UN);
+}
+
void
evalscript(JSContextRef js, char *script, char* scriptname) {
JSStringRef jsscript, jsscriptname;
t@@ -315,15 +371,6 @@ find(Client *c, const Arg *arg) {
}
const char *
-getcookies(SoupURI *uri) {
- const char *c;
- SoupCookieJar *j = soup_cookie_jar_text_new(cookiefile, TRUE);
- c = soup_cookie_jar_get_cookies(j, uri, TRUE);
- g_object_unref(j);
- return c;
-}
-
-const char *
getatom(Client *c, int a) {
static char buf[BUFSIZ];
Atom adummy;
t@@ -351,17 +398,6 @@ geturi(Client *c) {
return uri;
}
-void
-gotheaders(SoupMessage *msg, gpointer v) {
- GSList *l, *p;
-
- for(p = l = soup_cookies_from_response(msg); p;
- p = g_slist_next(p)) {
- setcookie((SoupCookie *)p->data);
- }
- soup_cookies_free(l);
-}
-
gboolean
initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) {
Arg arg;
t@@ -576,19 +612,6 @@ newclient(void) {
}
void
-newrequest(SoupSession *s, SoupMessage *msg, gpointer v) {
- SoupMessageHeaders *h = msg->request_headers;
- SoupURI *uri;
- const char *c;
-
- soup_message_headers_remove(h, "Cookie");
- uri = soup_message_get_uri(msg);
- if((c = getcookies(uri)))
- soup_message_headers_append(h, "Cookie", c);
- g_signal_connect_after(G_OBJECT(msg), "got-headers", G_CALLBACK(gothea…
-}
-
-void
newwindow(Client *c, const Arg *arg, gboolean noembed) {
guint i = 0;
const char *cmd[10], *uri;
t@@ -743,25 +766,6 @@ scroll(GtkAdjustment *a, const Arg *arg) {
}
void
-setcookie(SoupCookie *c) {
- int lock;
-
- lock = open(cookiefile, 0);
- flock(lock, LOCK_EX);
- SoupDate *e;
- SoupCookieJar *j = soup_cookie_jar_text_new(cookiefile, FALSE);
- c = soup_cookie_copy(c);
- if(c->expires == NULL && sessiontime) {
- e = soup_date_new_from_time_t(time(NULL) + sessiontime);
- soup_cookie_set_expires(c, e);
- }
- soup_cookie_jar_add_cookie(j, c);
- g_object_unref(j);
- flock(lock, LOCK_UN);
- close(lock);
-}
-
-void
setatom(Client *c, int a, const char *v) {
XSync(dpy, False);
XChangeProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), atoms…
t@@ -796,9 +800,9 @@ setup(void) {
/* request handler */
s = webkit_get_default_session();
- soup_session_remove_feature_by_type(s, soup_cookie_get_type());
- soup_session_remove_feature_by_type(s, soup_cookie_jar_get_type());
- g_signal_connect_after(G_OBJECT(s), "request-started", G_CALLBACK(newr…
+
+ /* cookie jar */
+ soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar_new(cookief…
/* ssl */
g_object_set(G_OBJECT(s), "ssl-ca-file", cafile, NULL);
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.