/* destroy the session on the server side */ void destroysession() { int sd; char *xml, query[256]; sprintf(query, "/destroysession.php?sessionid=%s", xmlxml.sessionid); do { *xmlxml.error = 0; sd = getconnection(host_entry, gijohnport); getxml(sd, &xml, query, gijohnserver, gijohnport, 0); close(sd); parsexml(xml); free(xml); if (*xmlxml.error) { printf("[-] Error: destroying session: %s\n[+] Sleeping for %dsec... and resending\n", xmlxml.error, SLEEP_TIME); sleep(SLEEP_TIME); } } while (*xmlxml.error); if (options.flags & FLG_VERBOSE) printf("[+] Session destroyed\n[+] Thanks for using GI John!\n"); return; }
bool SsXmlIArchiver::dc_attr( const char* name , int& member ) { AR_SELF_CHECK(); const char* v = getxml()->Attribute( name ); member = atoi(v); return true; }
bool SsXmlIArchiver::dc_attr(const char* name, FString& member) { AR_SELF_CHECK(); const char* v = 0; v = getxml()->Attribute(name); if(v != 0){ member= v; } return true; }
bool SsXmlIArchiver::dc(const char* name, FVector2D& member) { AR_SELF_CHECK(); XMLElement* e = getxml()->FirstChildElement(name); if(e) { FString str( e->GetText() ); return StringToPoint2( str , member ); } return false; }
bool SsXmlIArchiver::dc( const char* name , bool& member ) { AR_SELF_CHECK(); member = false; XMLElement* e = getxml()->FirstChildElement( name ); if ( e ) { int ret = GetTextToInt( e , 0 ); if ( ret == 1)member = true; return true; } return false; }
bool SsXmlIArchiver::dc( const char* name , SsString& member ) { AR_SELF_CHECK(); XMLElement* e = getxml()->FirstChildElement( name ); if ( e ) { if ( e->GetText() ) { //Winではsjisへ変換する member = babel::utf8_to_sjis( e->GetText() ); }else{ member =""; } return true; } return false; }
bool SsXmlIArchiver::dc( const char* name , std::vector<SsString>& list ) { AR_SELF_CHECK(); list.clear(); XMLElement* e = getxml()->FirstChildElement( name ); e = e->FirstChildElement( "value" ); while( e ) { const char* txt = e->GetText(); //Winではsjisへ変換する std::string sjis_str = babel::utf8_to_sjis( txt ); list.push_back( sjis_str ); e = e->NextSiblingElement(); } return true; }
bool SsXmlIArchiver::dc(const char* name, TArray<FName>& list) { AR_SELF_CHECK(); list.Empty(); XMLElement* e = getxml()->FirstChildElement(name); e = e->FirstChildElement("value"); while(e) { const char* txt = e->GetText(); FString sjis_str( babel::utf8_to_sjis( txt ).c_str() ); CheckReplaceJapaneseString(txt, sjis_str); list.Add( FName(*sjis_str) ); e = e->NextSiblingElement(); } return true; }
bool SsXmlIArchiver::dc(const char* name, FString& member) { AR_SELF_CHECK(); XMLElement* e = getxml()->FirstChildElement(name); if(e) { if(e->GetText()) { member = FString(babel::utf8_to_sjis( e->GetText() ).c_str()); CheckReplaceJapaneseString(e->GetText(), member); } else { member =""; } return true; } return false; }
bool SsXmlIArchiver::dc(const char* name, FSsCurve& member) { AR_SELF_CHECK(); XMLElement* e = getxml()->FirstChildElement( name ); if(e) { TArray<FString> str_list; split_string( e->GetText() , ' ' , str_list ); if(str_list.Num() < 4) { return false; }else{ member.StartTime = FCString::Atof(*(str_list[0])); member.StartValue = FCString::Atof(*(str_list[1])); member.EndTime = FCString::Atof(*(str_list[2])); member.EndValue = FCString::Atof(*(str_list[3])); return true; } } return false; }
bool SsXmlIArchiver::dc( const char* name , SsCurve& member ) { AR_SELF_CHECK(); XMLElement* e = getxml()->FirstChildElement( name ); if ( e ) { std::vector<SsString> str_list; split_string( e->GetText() , ' ' , str_list ); if ( str_list.size() < 4 ) { return false; }else{ member.startTime = (float)atof( str_list[0].c_str() ); member.startValue = (float)atof( str_list[1].c_str() ); member.endTime = (float)atof( str_list[2].c_str() ); member.endValue = (float)atof( str_list[3].c_str() ); return true; } } return false; }
/* getting the new datas*/ int getthenewpiece() { int sd, i; char *xml, query[256], *post, *post2; if (firstrun) { splitserver(gijohnserver, &gijohnport); if ((xmlxml.newhashes = malloc(sizeof(char))) == NULL) { fprintf(stderr, "Malloc error...\n"); exit(1); } *xmlxml.newhashes = 0; if ((xmlxml.delhashes = malloc(sizeof(char))) == NULL) { fprintf(stderr, "Malloc error...\n"); exit(1); } *xmlxml.newhashes = 0; memset(xmlxml.format, '\0', 64); memset(xmlxml.keymap.firstword, '\0', 64); memset(xmlxml.keymap.lastword, '\0', 64); memset(xmlxml.keymap.charset, '\0', 256); memset(xmlxml.error, '\0', 1024); memset(xmlxml.sessionid, '\0', 33); } if (getnewsid) { getini(username, password); makeformatandperformancexml(&post, username, password); if ((post2 = malloc(sizeof(char)*strlen(post)*3+1)) == NULL) { fprintf(stderr, "Malloc error...\n"); exit(1); } urlencode(post, post2); free(post); post = post2; setbuf(stdout, NULL); if (options.flags & FLG_VERBOSE) printf("[+] Getting new session\n"); if (gijohnsmp > 1) { for (i = 1; i < gijohnsmp; i++) { if (!fork()) { sessionname = malloc(sizeof(char)*30); memset(sessionname, 0, 30); sprintf(sessionname, "gijohnfork_%d", i); rec_name = sessionname; break; } } } sprintf(query, "/newsession.php"); do { *xmlxml.error = 0; host_entry = getthehostname(gijohnserver); if ((sd = getconnection(host_entry, gijohnport)) < 0) { strncpy(xmlxml.error, "connection error", strlen("connection error")); printf("[-] Connection error\n[+]" " Sleeping for %dsec... and reconnection\n", SLEEP_TIME); sleep(SLEEP_TIME); } else { postxml(sd, &xml, query, gijohnserver, gijohnport, post); close(sd); parsexml(xml); free(xml); if (*xmlxml.error) { printf("[-] Error (new sessionid): %s\n[+]" " Sleeping for %dsec... and resending\n", xmlxml.error, SLEEP_TIME); sleep(SLEEP_TIME); } } } while (*xmlxml.error); free(post); getnewsid = 0; if (options.flags & FLG_VERBOSE) printf("[+] New session is: %s\n", xmlxml.sessionid); } if (xmlxml.upgrade) { printf("[!] You have to upgrade your gijohn, because it's too old to use! Exiting...\n"); destroysession(); exit(1); } sprintf(query, "/getpieces.php?sessionid=%s", xmlxml.sessionid); do { *xmlxml.error = 0; if ((sd = getconnection(host_entry, gijohnport)) < 0) { strncpy(xmlxml.error, "connection error", strlen("connection error")); printf("[-] Connection error\n[+]" " Sleeping for %dsec... and reconnection\n", SLEEP_TIME); sleep(SLEEP_TIME); } else { getxml(sd, &xml, query, gijohnserver, gijohnport, options.flags & FLG_VERBOSE); close(sd); parsexml(xml); free(xml); if (*xmlxml.error) { printf("[-] Error (new keyspace): %s\n[+] " "Sleeping for %dsec... and resending\n", xmlxml.error, SLEEP_TIME); sleep(SLEEP_TIME); } } } while (*xmlxml.error); if (firstrun) { ldr_init_database(&database, &options.loader); } if (xmlxml.clearhashes) { memset(&database, '\0', sizeof(struct db_main)); ldr_init_database(&database, &options.loader); } if (*xmlxml.error == 0) { if (*xmlxml.newhashes) ldr_load_xml_array(&database, xmlxml.newhashes, xmlxml.format); if (*xmlxml.delhashes) ldr_load_xml_delarray(&database, xmlxml.delhashes); if (*xmlxml.newhashes || *xmlxml.delhashes) ldr_fix_xmldatabase(&database, xmlxml.clearhashes | firstrun); } else { printf("[-] Error: %s\n", xmlxml.error); exit(1); } if ((options.flags & FLG_VERBOSE) || firstrun) { log_event("Remaining %s", john_loaded_counts()); printf("[+] Loaded %s (%s [%s])\n", john_loaded_counts(), database.format->params.format_name, database.format->params.algorithm_name); } if (firstrun) { printf("[+] Server: %s\n[+] Charset: %s\n[+] Charset length: %d\n", gijohnserver, xmlxml.keymap.charset, (int)strlen(xmlxml.keymap.charset)); } return 0; }