/soc/2015/nakulgulati/main: 48868c941511: hangouts: api, cookie ...

[email protected]
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 48868c941511c2f309a4d63cf5746cb05f930bc8
Author:	 Nakul Gulati
Date:	 2015-07-31 03:46 +0800
Branch:	 hangouts
URL: https://hg.pidgin.im/soc/2015/nakulgulati/main/rev/48868c941511

Description:

hangouts: api, cookie parser and other fixes

diffstat:

 libpurple/protocols/hangouts/api.c  |  74 ++++++++++++++++++++++++++++++++----
 libpurple/protocols/hangouts/api.h  |   6 +++
 libpurple/protocols/hangouts/util.c |  30 +--------------
 libpurple/protocols/hangouts/util.h |   3 -
 4 files changed, 72 insertions(+), 41 deletions(-)

diffs (229 lines):

diff --git a/libpurple/protocols/hangouts/api.c b/libpurple/protocols/hangouts/api.c
--- a/libpurple/protocols/hangouts/api.c
+++ b/libpurple/protocols/hangouts/api.c
@@ -19,12 +19,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include <string.h>
 #include <glib.h>
 
 #include "http.h"
 
 #include "api.h"
-#include "util.h"
 //TODO api call backs
 
 G_DEFINE_TYPE(HangoutsApi, hangouts_api, G_TYPE_OBJECT);
@@ -34,11 +34,21 @@ enum _HangoutsConversationOffTheRecordSt
   HANGOUTS_OFF_THE_RECORD = 1, HANGOUTS_ON_THE_RECORD = 2
 };
 
+struct _HangoutsApiCookies{
+  gchar *APISID;
+  gchar *HSID;
+  gchar *NID;
+  gchar *SAPISID;
+  gchar *SID;
+  gchar *SSID;
+  gchar *test;
+};
+
 struct _HangoutsApiPrivate
 {
   PurpleConnection *gc;
   PurpleHttpCookieJar *cookie_jar;
-  GHashTable *cookies_tab;
+  HangoutsApiCookies *cookies;
 
   gchar *galx;
   gchar *api_key;
@@ -66,9 +76,9 @@ hangouts_api_dispose (GObject *obj)
       purple_http_conn_cancel_all (priv->gc);
     }
 
-  g_hash_table_destroy (priv->cookies_tab);
   purple_http_cookie_jar_unref(priv->cookie_jar);
 
+  g_free(priv->cookies);
   g_free (priv->galx);
   g_free (priv->access_token);
   g_free (priv->api_key);
@@ -103,31 +113,78 @@ hangouts_api_new (PurpleConnection *gc)
 {
   HangoutsApi *api;
   HangoutsApiPrivate *priv;
+  HangoutsApiCookies *cookies;
 
   api = g_object_new (HANGOUTS_TYPE_API, NULL);
   priv = api->priv;
+  cookies = malloc(sizeof(HangoutsApiCookies));
+  priv->cookies = cookies;
 
   priv->gc = gc;
-  priv->cookies_tab = g_hash_table_new (g_str_hash, g_str_equal);
 
   return api;
 }
 
+void
+hangouts_api_parse_header (HangoutsApiCookies *cookies, GList *headers)
+{
+  GList *l;
+
+  for(l = headers; l!=NULL; l=l->next)
+    {
+      const gchar *cookie = l->data;
+      const gchar *eqsign, *semicolon;
+      gchar *name, *value;
+
+      eqsign = strchr (cookie, '=');
+      semicolon = strchr (cookie, ';');
+
+      name = g_strndup (cookie, eqsign - cookie);
+      eqsign++;
+      if (semicolon != NULL)
+	value = g_strndup (eqsign, semicolon - eqsign);
+      else
+	value = g_strdup (eqsign);
+
+      if(g_str_equal(name, "APISID")){
+	  cookies->APISID = value;
+      }
+      else if(g_str_equal(name, "HSID")){
+	  cookies->HSID = value;
+      }
+      else if(g_str_equal(name, "NID")){
+	  cookies->NID = value;
+      }
+      else if(g_str_equal(name, "SAPISID")){
+	  cookies->SAPISID = value;
+      }
+      else if(g_str_equal(name, "SID")){
+	  cookies->SID = value;
+      }
+      else if(g_str_equal(name, "SSID")){
+	  cookies->SSID = value;
+      }
+      g_free(name);
+      g_free(value);
+
+    }
+}
+
 static void
 hangouts_api_fetch_cookies_cb (PurpleHttpConnection *http_conn,
 			       PurpleHttpResponse *response, gpointer user_data)
 {
-  purple_debug_misc ("hangouts-prpl", "second call back");
   HangoutsApi *api;
+  HangoutsApiPrivate *priv;
 
   api = user_data;
+  priv = api->priv;
 
   PurpleHttpCookieJar *cj = purple_http_conn_get_cookie_jar (http_conn);
 
   GList *headers = purple_http_response_get_headers_by_name (response,
 							     "Set-Cookie");
-
-  hangouts_util_parse_header (api->priv->cookies_tab, headers);
+  hangouts_api_parse_header (priv->cookies, headers);
 }
 
 void
@@ -151,8 +208,7 @@ hangouts_api_fetch_login_cookies (Hangou
       "&Passwd=%s"
       "&PersistentCookie=yes"
       "&GALX=%s"
-      "&continue=https:\/\/talkgadget.google.com\/talkgadget\/gauth?verify=true"
-      "&skipvpage=true",
+      "&Page=PasswordSeparationSignIn",
       username, password, priv->galx);
   request = purple_http_request_new (url);
 
diff --git a/libpurple/protocols/hangouts/api.h b/libpurple/protocols/hangouts/api.h
--- a/libpurple/protocols/hangouts/api.h
+++ b/libpurple/protocols/hangouts/api.h
@@ -22,6 +22,8 @@
 #ifndef _API_H
 #define _API_H
 
+#include "connection.h"
+
 #define HANGOUTS_ORIGIN_URL "https://talkgadget.google.com"
 #define HANGOUTS_IMAGE_UPLOAD_URL "http://docs.google.com/upload/photos/resumable"
 #define HANGOUTS_PVT_TOKEN_URL "https://talkgadget.google.com/talkgadget/_/extension-start"
@@ -48,6 +50,7 @@ typedef struct _HangoutsApi HangoutsApi;
 typedef struct _HangoutsApiClass HangoutsApiClass;
 typedef struct _HangoutsApiPrivate HangoutsApiPrivate;
 typedef struct _HangoutsApiHttpInfo HangoutsApiHttpInfo;
+typedef struct _HangoutsApiCookies HangoutsApiCookies;
 
 struct _HangoutsApi
 {
@@ -67,6 +70,9 @@ HangoutsApi *
 hangouts_api_new (PurpleConnection *gc);
 
 void
+hangouts_api_parse_header (HangoutsApiCookies *cookies, GList *headers);
+
+void
 hangouts_api_get_galx_cookie (HangoutsApi *api);
 
 void
diff --git a/libpurple/protocols/hangouts/util.c b/libpurple/protocols/hangouts/util.c
--- a/libpurple/protocols/hangouts/util.c
+++ b/libpurple/protocols/hangouts/util.c
@@ -25,6 +25,7 @@
 #include "debug.h"
 
 #include "util.h"
+#include "api.h"
 
 gchar *
 hangouts_util_escape_string (gchar *string)
@@ -69,32 +70,3 @@ hangouts_util_parse (gchar *raw_data)
 
   return chat_init_data;
 }
-
-void
-hangouts_util_parse_header (GHashTable *cookies_tab, GList *headers)
-{
-  headers = g_list_first (headers);
-  while (headers)
-    {
-      const gchar *cookie = headers->data;
-      const gchar *eqsign, *semicolon;
-      gchar *name, *value;
-      headers = g_list_next(headers);
-
-      eqsign = strchr (cookie, '=');
-      semicolon = strchr (cookie, ';');
-
-      name = g_strndup (cookie, eqsign - cookie);
-      eqsign++;
-      if (semicolon != NULL)
-	value = g_strndup (eqsign, semicolon - eqsign);
-      else
-	value = g_strdup (eqsign);
-
-      purple_debug_misc("hangouts-prpl", "name: %s, value: %s", name, value);
-
-      g_free(name);
-      g_free(value);
-
-    }
-}
diff --git a/libpurple/protocols/hangouts/util.h b/libpurple/protocols/hangouts/util.h
--- a/libpurple/protocols/hangouts/util.h
+++ b/libpurple/protocols/hangouts/util.h
@@ -33,7 +33,4 @@ hangouts_util_escape_string (gchar *stri
 GHashTable *
 hangouts_util_parse (gchar *raw_data);
 
-void
-hangouts_util_parse_header (GHashTable *cookies_tab, GList *headers);
-
 #endif _UTIL_H

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.