Exemplo n.º 1
0
static inline void
roaming_request_reset (RoamingRequest *roaming_request)
{
    if (roaming_request->open_sig_handler)
        g_signal_handler_disconnect (roaming_request->conn, roaming_request->open_sig_handler);

    pn_node_free (roaming_request->conn);
    pn_parser_free (roaming_request->parser);
    roaming_request->parser_state = 0;

    g_free (roaming_request->location);
    roaming_request->location = NULL;

    g_free (roaming_request);
}
Exemplo n.º 2
0
static inline void
roaming_request_free (RoamingRequest *roaming_request)
{
    if (roaming_request->open_sig_handler)
        g_signal_handler_disconnect (roaming_request->conn, roaming_request->open_sig_handler);

    pn_node_free (roaming_request->conn);
    pn_parser_free (roaming_request->parser);

    g_free (roaming_request->value);
    g_free (roaming_request->extra_value);

    g_free (roaming_request->location);

    g_free (roaming_request);
}
Exemplo n.º 3
0
void
msn_nexus_destroy(MsnNexus *nexus)
{
    if (nexus->error_handler)
        g_signal_handler_disconnect(nexus->conn, nexus->error_handler);
    if (nexus->open_handler)
        g_signal_handler_disconnect(nexus->conn, nexus->open_handler);
    g_object_unref(nexus->conn);
    pn_parser_free(nexus->parser);

    if (nexus->header)
        g_string_free(nexus->header, TRUE);

    g_free(nexus->login_host);
    g_free(nexus->login_path);

    if (nexus->challenge_data)
        g_hash_table_destroy(nexus->challenge_data);

    g_free(nexus);
}
Exemplo n.º 4
0
static void
nexus_read_cb(PnNode *conn,
              gpointer data)
{
    MsnNexus *nexus = data;
    GIOStatus status = G_IO_STATUS_NORMAL;
    gchar *str = NULL;

    while (nexus->parser_state == 0) {
        gsize terminator_pos;

        status = pn_parser_read_line(nexus->parser, &str, NULL, &terminator_pos, NULL);

        if (status == G_IO_STATUS_AGAIN)
            return;

        if (status != G_IO_STATUS_NORMAL) {
            msn_session_set_error(nexus->session, MSN_ERROR_AUTH,
                                  _("nexus stream error"));
            return;
        }

        if (str) {
            char *field;
            str[terminator_pos] = '\0';

            if ((field = get_field(str, "PassportURLs: "))) {
                char *da_login;

                da_login = strstr(field, "DALogin="******"DALogin="******"msnia.login.live.com");
#endif
                }
            }

            g_free(str);

            if (nexus->login_host) {
                PnSslConn *ssl_conn;
                PnNode *conn;

                ssl_conn = pn_ssl_conn_new("login", PN_NODE_NULL);

                conn = PN_NODE(ssl_conn);
                conn->session = nexus->session;

                if (nexus->error_handler)
                    g_signal_handler_disconnect(nexus->conn, nexus->error_handler);
                if (nexus->open_handler)
                    g_signal_handler_disconnect(nexus->conn, nexus->open_handler);
                g_object_unref(nexus->conn);
                pn_parser_free(nexus->parser);
                nexus->parser_state = 0;

                nexus->parser = pn_parser_new(conn);
                pn_ssl_conn_set_read_cb(ssl_conn, login_read_cb, nexus);

                nexus->conn = conn;
                nexus->open_handler = g_signal_connect(conn, "open", G_CALLBACK(login_open_cb), nexus);
                nexus->error_handler = g_signal_connect(conn, "error", G_CALLBACK(close_cb), nexus);

                pn_node_connect(conn, nexus->login_host, 443);

                return;
            }
        }
    }
}
Exemplo n.º 5
0
int value(int argc, char **argv)
{
  pn_atom_t data[1024];
  pn_atoms_t atoms = {1024, data};

  int err = pn_fill_atoms(&atoms, "DDsL[i[i]i]{sfsf}@DLT[sss]", "blam", 21, 1, 2, 3,
                          "pi", 3.14159265359, "e", 2.7,
                          (uint64_t) 42, PN_SYMBOL, "one", "two", "three");
  if (err) {
    printf("err = %s\n", pn_code(err));
  } else {
    pn_print_atoms(&atoms);
    printf("\n");
  }

  pn_bytes_t blam;
  uint64_t n;
  int32_t one, two, three;

  pn_bytes_t key1;
  float val1;

  pn_bytes_t key2;
  float val2;

  uint64_t al;
  pn_type_t type;

  bool threeq;

  pn_bytes_t sym;

  err = pn_scan_atoms(&atoms, "DDsL[i[i]?i]{sfsf}@DLT[.s.]", &blam, &n, &one, &two, &threeq, &three,
                      &key1, &val1, &key2, &val2, &al, &type, &sym);
  if (err) {
    printf("err = %s\n", pn_code(err));
  } else {
    printf("scan=%.*s %" PRIu64 " %i %i %i %.*s %f %.*s %f %" PRIu64 " %i %.*s\n", (int) blam.size,
	   blam.start, n, one, two, three, (int) key1.size, key1.start, val1, (int) key2.size,
	   key2.start, val2, al, threeq, (int) sym.size, sym.start);
  }

  char str[1024*10];
  int ch, idx = 0;
  while ((ch = getchar()) != EOF) {
    str[idx++] = ch;
  }
  str[idx] = '\0';

  /*  str[0] = '\0';
  for (int i = 2; i < argc; i++) {
    strcat(str, argv[i]);
    if (i < argc - 1)
      strcat(str, " ");
      }*/

  printf("JSON: %s\n", str);

  pn_atom_t parserdata[1024];
  pn_atoms_t parserd = {1024, parserdata};

  printf("\n");

  pn_parser_t *parser = pn_parser();

  err = pn_parser_parse(parser, str, &parserd);
  if (err) {
    printf("parse err=%s, %s\n", pn_code(err), pn_parser_error(parser));
  } else {
    printf("--\n");
    for (int i = 0; i < parserd.size; i++) {
      printf("%s: ", pn_type_str(parserd.start[i].type));
      err = pn_print_atom(parserd.start[i]);
      if (err) printf("err=%s", pn_code(err));
      printf("\n");
    }
    printf("--\n");
    err = pn_print_atoms(&parserd);
    if (err) printf("print err=%s", pn_code(err));
    printf("\n");
  }

  pn_parser_free(parser);

  return 0;
}