static void process_vstp(const char * string, const jsmntok_t * tokens) { char zs[128]; stats[GoodMessage]++; jsmn_find_extract_token(string, tokens, 0, "transaction_type", zs, sizeof(zs)); if(zs[0]) { // printf(" Transaction type: \"%s\"", zs); if(!strcasecmp(zs, "Delete")) process_delete_schedule(string, tokens); else if(!strcasecmp(zs, "Create")) process_create_schedule(string, tokens, false); else if(!strcasecmp(zs, "Update")) process_update_schedule(string, tokens); else { _log(MAJOR, "process_schedule(): Unrecognised transaction type \"%s\".", zs); jsmn_dump_tokens(body, tokens, 0); stats[NotTransaction]++; } } else { _log(MAJOR, "process_schedule(): Failed to determine transaction type."); jsmn_dump_tokens(body, tokens, 0); stats[NotTransaction]++; } }
static void process_update_schedule(const char * string, const jsmntok_t * tokens) { char query[1024], CIF_train_uid[16], schedule_start_date[16], schedule_end_date[16], CIF_stp_indicator[8]; dword id; MYSQL_RES * result0; MYSQL_ROW row0; EXTRACT("CIF_train_uid", CIF_train_uid); EXTRACT("schedule_start_date", schedule_start_date); EXTRACT("schedule_end_date", schedule_end_date); EXTRACT("CIF_stp_indicator", CIF_stp_indicator); time_t schedule_start_date_stamp = parse_datestamp(schedule_start_date); // time_t schedule_end_date_stamp = parse_datestamp(schedule_end_date); sprintf(query, "SELECT id FROM cif_schedules WHERE update_id = 0 AND CIF_train_uid = '%s' AND CIF_stp_indicator = '%s' AND schedule_start_date = %ld AND deleted > %ld", CIF_train_uid, CIF_stp_indicator, schedule_start_date_stamp, time(NULL)); if(!db_query(query)) { result0 = db_store_result(); word num_rows = mysql_num_rows(result0); if(num_rows != 1) { _log(MAJOR, "Update for schedule \"%s\" found %d existing records. Delete phase skipped.", CIF_train_uid, num_rows); jsmn_dump_tokens(string, tokens, 0); if(num_rows) stats[UpdateDeleteMulti]++; else stats[UpdateDeleteMiss]++; } else { row0 = mysql_fetch_row(result0); id = atol(row0[0]); //sprintf(query, "DELETE FROM cif_schedule_locations WHERE cif_schedule_id = %ld", id); //db_query(query); sprintf(query, "UPDATE cif_schedules SET deleted = %ld WHERE id = %ld", time(NULL), id); db_query(query); } mysql_free_result(result0); } // Create phase. process_create_schedule(string, tokens, true); _log(DEBUG, "Updated schedule \"%s\".", CIF_train_uid); }
static void process_schedule(const char * string, const jsmntok_t * tokens) { char zs[128], zs1[1024]; jsmn_find_extract_token(string, tokens, 0, "transaction_type", zs, sizeof(zs)); if(zs[0]) { // printf(" Transaction type: \"%s\"", zs); if(!strcasecmp(zs, "Delete")) ; else if(!strcasecmp(zs, "Create")) process_create_schedule(string, tokens); else { sprintf(zs1, "process_schedule(): Unrecognised transaction type \"%s\".", zs); _log(MAJOR, zs1); } } else { _log(MAJOR, "process_schedule(): Failed to determine transaction type."); } }