text: /*
  gpiOperation.h
  GameSpy Presence SDK 
  Dan "Mr. Pants" Schoenblum
  
  Copyright 1999-2007 GameSpy Industries, Inc
  
  devsupport@gamespy.com
  
  ***********************************************************************
  Please see the GameSpy Presence SDK documentation for more information
  **********************************************************************/
  
  #ifndef _GPIOPERATION_H_
  #define _GPIOPERATION_H_
  
  //INCLUDES
  //////////
  #include "gpi.h"
  
  //DEFINES
  /////////
  // Operation Types.
  ///////////////////
  #define GPI_CONNECT                    0
  #define GPI_NEW_PROFILE                1
  #define GPI_GET_INFO                   2
  #define GPI_PROFILE_SEARCH             3
  #define GPI_REGISTER_UNIQUENICK        4
  #define GPI_DELETE_PROFILE             5
  #define GPI_REGISTER_CDKEY             6
  // Operation States.
  ////////////////////
  #define GPI_START                      0
  //#define GPI_CONNECTING               1
  #define GPI_LOGIN                      2
  #define GPI_REQUESTING                 3
  #define GPI_WAITING                    4
  #define GPI_FINISHING                  5
  
  //TYPES
  ///////
  // Operation data.
  //////////////////
  typedef struct GPIOperation_s
  {
    int type;
    void * data;
    GPIBool blocking;
    GPICallback callback;
    int state;
    int id;
    GPResult result;
    struct GPIOperation_s * pnext;
  } GPIOperation;
  
  // Connect operation data.
  //////////////////////////
  typedef struct
  {
    char serverChallenge[128];
    char userChallenge[33];
    char passwordHash[33];
    char authtoken[GP_AUTHTOKEN_LEN];
    char partnerchallenge[GP_PARTNERCHALLENGE_LEN];
    char cdkey[GP_CDKEY_LEN];
    GPIBool newuser;
  } GPIConnectData;
  
  //FUNCTIONS
  ///////////
  GPResult
  gpiAddOperation(
    GPConnection * connection,
    int type,
    void * data,
    GPIOperation ** op,
    GPEnum blocking,
    GPCallback callback,
    void * param
  );
  
  void
  gpiRemoveOperation(
    GPConnection * connection,
    GPIOperation * operation
  );
  
  void
  gpiDestroyOperation(
    GPConnection * connection,
    GPIOperation * operation
  );
  
  GPIBool
  gpiFindOperationByID(
    const GPConnection * connection,
    GPIOperation ** operation,
    int id
  );
  
  GPIBool
  gpiOperationsAreBlocking(
    const GPConnection * connection
  );
  
  GPResult
  gpiProcessOperation(
    GPConnection * connection,
    GPIOperation * operation,
    const char * input
  );
  
  GPResult
  gpiFailedOpCallback(
    GPConnection * connection,
    const GPIOperation * operation
  );
  
  #endif
  