working on cookies

This commit is contained in:
Enno Boland (tox) 2010-03-24 20:56:56 +01:00
parent e2cae4d1f5
commit b8105c64ed

39
surf.c
View File

@ -80,7 +80,9 @@ static void drawindicator(Client *c);
static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c); static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c);
static void find(Client *c, const Arg *arg); static void find(Client *c, const Arg *arg);
static const char *getatom(Client *c, Atom a); static const char *getatom(Client *c, Atom a);
static const char *getcookies(SoupURI *uri);
static char *geturi(Client *c); static char *geturi(Client *c);
void gotheaders(SoupMessage *msg, gpointer user_data);
static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c); static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
static void itemclick(GtkMenuItem *mi, Client *c); static void itemclick(GtkMenuItem *mi, Client *c);
static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c); static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c);
@ -99,6 +101,7 @@ static void reload(Client *c, const Arg *arg);
static void resize(GtkWidget *w, GtkAllocation *a, Client *c); static void resize(GtkWidget *w, GtkAllocation *a, Client *c);
static void scroll(Client *c, const Arg *arg); static void scroll(Client *c, const Arg *arg);
static void setatom(Client *c, Atom a, const char *v); static void setatom(Client *c, Atom a, const char *v);
static void setcookie(SoupCookie *c);
static void setup(void); static void setup(void);
static void sigchld(int unused); static void sigchld(int unused);
static void source(Client *c, const Arg *arg); static void source(Client *c, const Arg *arg);
@ -300,6 +303,11 @@ find(Client *c, const Arg *arg) {
webkit_web_view_search_text(c->view, s, FALSE, forward, TRUE); webkit_web_view_search_text(c->view, s, FALSE, forward, TRUE);
} }
const char *
getcookies(SoupURI *uri) {
return NULL;
}
const char * const char *
getatom(Client *c, Atom a) { getatom(Client *c, Atom a) {
static char buf[BUFSIZ]; static char buf[BUFSIZ];
@ -328,6 +336,19 @@ geturi(Client *c) {
return uri; return uri;
} }
void
gotheaders(SoupMessage *msg, gpointer v) {
SoupURI *uri;
GSList *l, *p;
uri = soup_message_get_uri(msg);
for(p = l = soup_cookies_from_response(msg); p;
p = g_slist_next(p)) {
setcookie((SoupCookie *)p->data);
}
soup_cookies_free(l);
}
gboolean gboolean
initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) { initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) {
const char *filename; const char *filename;
@ -555,10 +576,17 @@ newclient(void) {
return c; return c;
} }
static void newrequest(SoupSession *s, SoupMessage *msg, gpointer v) { void
newrequest(SoupSession *s, SoupMessage *msg, gpointer v) {
SoupMessageHeaders *h = msg->request_headers; SoupMessageHeaders *h = msg->request_headers;
SoupURI *uri;
const char *c;
soup_message_headers_remove(h, "Cookie"); soup_message_headers_remove(h, "Cookie");
uri = soup_message_get_uri(msg);
if((c = getcookies(uri))) {
soup_message_headers_append(h, "Cookie", c);
}
} }
void void
@ -668,6 +696,11 @@ scroll(Client *c, const Arg *arg) {
gtk_adjustment_set_value(a, v); gtk_adjustment_set_value(a, v);
} }
void
setcookie(SoupCookie *c) {
}
void void
setatom(Client *c, Atom a, const char *v) { setatom(Client *c, Atom a, const char *v) {
XSync(dpy, False); XSync(dpy, False);
@ -706,6 +739,7 @@ setup(void) {
soup_session_remove_feature_by_type(s, soup_cookie_get_type()); soup_session_remove_feature_by_type(s, soup_cookie_get_type());
soup_session_remove_feature_by_type(s, soup_cookie_jar_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(newrequest), NULL); g_signal_connect_after(G_OBJECT(s), "request-started", G_CALLBACK(newrequest), NULL);
g_signal_connect_after(G_OBJECT(s), "got-headers", G_CALLBACK(gotheaders), NULL);
/* proxy */ /* proxy */
@ -829,7 +863,8 @@ zoom(Client *c, const Arg *arg) {
} }
} }
int main(int argc, char *argv[]) { int
main(int argc, char *argv[]) {
int i; int i;
Arg arg; Arg arg;