void explorerAddReader( int readerNumber ) { char numberString[20]; int tagNum; GtkTreeIter readerIter, nameIter, driverIter, SAMIter, SAMIDIter, SAMSerialIter, tagListIter; sprintf( numberString, "Reader %d", readerNumber ); gtk_tree_store_insert( store, &readerIter, &rootIter, readerNumber ); /* Acquire a child iterator */ /* if we are currently connected to this reader then we can show info */ if ( readerManager.readers[readerNumber].hCard != NULL ) { gtk_tree_store_set( store, &readerIter, OBJECT_COLUMN, numberString, DESCRIPTION_COLUMN, "Connected", -1); /***************** NAME **********************/ gtk_tree_store_append( store, &nameIter, &readerIter ); gtk_tree_store_set( store, &nameIter, OBJECT_COLUMN, "Name/Firmware", DESCRIPTION_COLUMN, readerManager.readers[readerNumber].name, -1); /***************** DRIVER **********************/ gtk_tree_store_append( store, &driverIter, &readerIter ); gtk_tree_store_set( store, &driverIter, OBJECT_COLUMN, "Driver", DESCRIPTION_COLUMN, readerManager.readers[readerNumber].driverDescriptor, -1); /******************** SAM **********************/ gtk_tree_store_append( store, &SAMIter, &readerIter ); /* if there is a SAM present then show it's details */ if ( readerManager.readers[readerNumber].SAM ) { gtk_tree_store_set( store, &SAMIter, OBJECT_COLUMN, "SAM", DESCRIPTION_COLUMN, "Present", -1); gtk_tree_store_append( store, &SAMIDIter, &SAMIter ); gtk_tree_store_set( store, &SAMIDIter, OBJECT_COLUMN, "ID", DESCRIPTION_COLUMN, readerManager.readers[readerNumber].SAM_id, -1); gtk_tree_store_append( store, &SAMSerialIter, &SAMIter ); gtk_tree_store_set( store, &SAMSerialIter, OBJECT_COLUMN, "Serial", DESCRIPTION_COLUMN, readerManager.readers[readerNumber].SAM_serial, -1); } else gtk_tree_store_set( store, &SAMIter, OBJECT_COLUMN, "SAM", DESCRIPTION_COLUMN, "No SAM present", -1); /******************** TAGS **********************/ sprintf( numberString, "%d tags", readerManager.readers[readerNumber].tagList.numTags); gtk_tree_store_append( store, &tagListIter, &readerIter ); gtk_tree_store_set( store, &tagListIter, OBJECT_COLUMN, "Tags", DESCRIPTION_COLUMN, numberString, -1); for ( tagNum = 0; tagNum < readerManager.readers[readerNumber].tagList.numTags; tagNum++ ) tagAdd( &readerManager, &tagListIter, readerNumber, tagNum ); } else { /* we have not connected to this reader, see if it exists */ if ( readerNumber >= readerManager.nbReaders ) { gtk_tree_store_set( store, &readerIter, OBJECT_COLUMN, numberString, DESCRIPTION_COLUMN, "Not detected", -1); } else { /* there is such a reader in the system, although we're not connected to it */ gtk_tree_store_set( store, &readerIter, OBJECT_COLUMN, numberString, DESCRIPTION_COLUMN, "Not connected", -1); if ( readerManager.readers[readerNumber].name != NULL ) { /***************** NAME **********************/ gtk_tree_store_append( store, &nameIter, &readerIter ); gtk_tree_store_set( store, &nameIter, OBJECT_COLUMN, "Name/Firmware", DESCRIPTION_COLUMN, readerManager.readers[readerNumber].name, -1); /***************** DRIVER **********************/ gtk_tree_store_append( store, &driverIter, &readerIter ); gtk_tree_store_set( store, &driverIter, OBJECT_COLUMN, "Driver", DESCRIPTION_COLUMN, "Information not available", -1); } } } }
//Compose the XML ATM_request message used to send the job info to the user //DGAS server. void ATMc_xml_compose(string requestType, ATM_job_data &job_data, ATM_usage_info &usage_info, vector<string> info_v, string *xml) { // add client version to info vector: string cVString = "atmClientVersion="; cVString += ATM_CLIENT_VERSION; cVString += VERSION; info_v.push_back(cVString); *xml = "<HLR type=\""; *xml += requestType; *xml += "\">\n"; *xml += "<BODY>\n"; *xml += "<JOB_PAYMENT>\n"; *xml += "<EDG_ECONOMIC_ACCOUNTING>\n"; *xml += job_data.economicAccountingFlag; *xml += "</EDG_ECONOMIC_ACCOUNTING>\n"; *xml += "<DG_JOBID>\n"; *xml += job_data.dgJobId; *xml += "\n</DG_JOBID>\n"; *xml += "<SUBMISSION_TIME>\n"; *xml += job_data.time; *xml += "\n</SUBMISSION_TIME>\n"; *xml += "<RES_ACCT_PA_ID>\n"; *xml += job_data.res_acct_PA_id; *xml += "\n</RES_ACCT_PA_ID>\n"; *xml += "<RES_ACCT_BANK_ID>\n"; *xml += job_data.res_acct_bank_id; *xml += "\n</RES_ACCT_BANK_ID>\n"; *xml += "<USER_CERT_SUBJECT>\n"; *xml += job_data.user_CertSubject; *xml += "\n</USER_CERT_SUBJECT>\n"; *xml += "<RES_GRID_ID>\n"; *xml += job_data.res_grid_id; *xml += "\n</RES_GRID_ID>\n"; *xml += "<forceResourceHlrOnly>\n"; *xml += "yes"; *xml += "\n</forceResourceHlrOnly>\n"; *xml += "<JOB_INFO>\n"; *xml += "<CPU_TIME>\n"; *xml += int2string(usage_info.cpu_time); *xml += "\n</CPU_TIME>\n"; *xml += "<WALL_TIME>\n"; *xml += int2string(usage_info.wall_time); *xml += "\n</WALL_TIME>\n"; *xml += "<MEM>\n"; *xml += usage_info.mem; *xml += "\n</MEM>\n"; *xml += "<VMEM>\n"; *xml += usage_info.vmem; *xml += "\n</VMEM>\n"; *xml += "</JOB_INFO>\n"; *xml += "</JOB_PAYMENT>\n"; *xml += "<AdditionalUR>\n"; vector<string>::iterator it = info_v.begin(); while (it != info_v.end()) { int pos = (*it).find_first_of( "=" ); if ( pos != string::npos ) { vector<attribute> attributes; string keyBuff = ""; string valueBuff = ""; keyBuff = (*it).substr(0, pos); valueBuff = (*it).substr(pos+1, (*it).size()-pos); attribute attrBuff = {keyBuff,valueBuff}; attributes.push_back(attrBuff); *xml += tagAdd ("dgas:item", "", attributes ); } it++; } *xml += "</AdditionalUR>\n"; *xml += "</BODY>\n"; *xml += "</HLR>\n"; return; }