X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=json_gssapi%2Fsrc%2FGSSRequest.cpp;h=05170157a8b3be3ec5e32c64d4954f38fb0a6710;hb=f98b02598095a78b0dac063c2288157d13b6b679;hp=d2925f4f0b0fe815e45cc97c17bed7c396ddee70;hpb=a861c68b99c41ef3309b53ab04929a4db6040844;p=gssweb.git diff --git a/json_gssapi/src/GSSRequest.cpp b/json_gssapi/src/GSSRequest.cpp index d2925f4..0517015 100644 --- a/json_gssapi/src/GSSRequest.cpp +++ b/json_gssapi/src/GSSRequest.cpp @@ -11,7 +11,9 @@ #include "commands/GSSAcquireCred.h" #include "commands/GSSInitSecContext.h" #include "commands/GSSImportName.h" +#include "commands/GSSDisplayName.h" #include "GSSRequest.h" +#include "GSSException.h" using std::bad_alloc; @@ -31,18 +33,29 @@ GSSRequest::GSSRequest ( string jsonString ) void GSSRequest::execute() { - /* variables */ - /* Error checking */ - /* Setup */ - parseJSON(); - getCommand(); - - /* Main processing */ - if (NULL != cmd) - cmd->execute(); - - /* Cleanup */ - /* Return */ + try { + /* variables */ + /* Error checking */ + /* Setup */ + parseJSON(); + getCommand(); + + /* Main processing */ + if (NULL != cmd) + cmd->execute(); + + /* Cleanup */ + /* Return */ + } + catch (GSSException e) + { + delete(cmd); + cmd = NULL; + JSONObject return_values; + return_values.set("major_status", e.getMajor()); + return_values.set("minor_status", e.getMinor()); +// response.set("error_message", e.what()); + } } @@ -60,7 +73,7 @@ void GSSRequest::parseJSON() response.set("method", request.get("method").string()); } /* bad_alloc is thrown when JSONObject can't parse the input string as JSON */ - catch ( bad_alloc& e ) + catch ( bad_alloc& ) { // Top-level response response.set("error_message", "Could not parse the input JSON."); @@ -93,6 +106,10 @@ void GSSRequest::getCommand() { cmd = new GSSAcquireCred ( &arguments ); } + else if ( "gss_display_name" == method ) + { + cmd = new GSSDisplayName ( &arguments ); + } else { string error_message = string("Unrecognized command: ") + method; @@ -123,3 +140,32 @@ string GSSRequest::getResponse() /* Return */ return(gssResponse); } + + + +char *gss_request(char *json_string) +{ + /* Variables */ + char *retVal; + string output; + GSSRequest *req = new GSSRequest(string(json_string)); + + /* Error checking */ + // An empty json_string could be an error, but GSSRequest does + // a good job of handling it. + + /* Setup */ + /* Main processing */ + req->execute(); + output = req->getResponse(); + retVal = new char[ output.length() + 1 ]; + output.copy(retVal, output.length(), 0); + retVal[output.length()] = 0; + + return(retVal); +} + +void deallocate_reply(char *reply) +{ + delete(reply); +}