+static void
+cookiejar_changed(SoupCookieJar *self, SoupCookie *old_cookie,
+ SoupCookie *new_cookie) {
+ flock(COOKIEJAR(self)->lock, LOCK_EX);
+ if(new_cookie && !new_cookie->expires && sessiontime) {
+ soup_cookie_set_expires(new_cookie,
+ soup_date_new_from_now(sessiontime));
+ }
+ SOUP_COOKIE_JAR_CLASS(cookiejar_parent_class)->changed(self,
+ old_cookie, new_cookie);
+ 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_class)->get_property;
+ 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,
+ SoupCookieJarAcceptPolicy policy) {
+ return g_object_new(COOKIEJAR_TYPE,
+ SOUP_COOKIE_JAR_TEXT_FILENAME, filename,
+ SOUP_COOKIE_JAR_READ_ONLY, read_only,
+ SOUP_COOKIE_JAR_ACCEPT_POLICY, policy, NULL);
+}
+
+static void
+cookiejar_set_property(GObject *self, guint prop_id, const GValue *value,
+ GParamSpec *pspec) {
+ flock(COOKIEJAR(self)->lock, LOCK_SH);
+ G_OBJECT_CLASS(cookiejar_parent_class)->set_property(self, prop_id,
+ value, pspec);
+ flock(COOKIEJAR(self)->lock, LOCK_UN);
+}
+
+static SoupCookieJarAcceptPolicy
+cookiepolicy_get(void) {
+ switch(cookiepolicies[policysel]) {
+ case 'a':
+ return SOUP_COOKIE_JAR_ACCEPT_NEVER;
+ case '@':
+ return SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
+ case 'A':
+ default:
+ break;
+ }
+
+ return SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
+}
+
+static char
+cookiepolicy_set(const SoupCookieJarAcceptPolicy ep) {
+ switch(ep) {
+ case SOUP_COOKIE_JAR_ACCEPT_NEVER:
+ return 'a';
+ case SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY:
+ return '@';
+ case SOUP_COOKIE_JAR_ACCEPT_ALWAYS:
+ default:
+ break;
+ }
+
+ return 'A';
+}
+
+static void
+evalscript(JSContextRef js, char *script, char* scriptname) {