text: // Google BSD license http://code.google.com/google_bsd_license.html
  // Copyright 2014 Google Inc. wrightt@google.com
  
  //
  // WebInspector Remote Procedure Call formatter.
  //
  
  #ifndef RPC_H
  #define	RPC_H
  
  #ifdef	__cplusplus
  extern "C" {
  #endif
  
  #include <plist/plist.h>
  #include <stdint.h>
  #include <stdlib.h>
  
  
  typedef uint8_t rpc_status;
  #define RPC_ERROR 1
  #define RPC_SUCCESS 0
  
  // Create a UUID, e.g. "4B2550E4-13D6-4902-A48E-B45D5B23215B".
  rpc_status rpc_new_uuid(char **to_uuid);
  
  struct rpc_app_struct {
    char *app_id;
    char *app_name;
    bool is_proxy;
  };
  typedef struct rpc_app_struct *rpc_app_t;
  
  struct rpc_page_struct {
    uint32_t page_id;
    char *connection_id;
    char *title;
    char *url;
  };
  typedef struct rpc_page_struct *rpc_page_t;
  
  struct rpc_struct;
  typedef struct rpc_struct *rpc_t;
  rpc_t rpc_new();
  void rpc_free(rpc_t self);
  
  // WebInspector Remote Procedure Call formatter.
  struct rpc_struct {
  
      //
      // Call these APIs:
      //
  
      // Calls on_*.
      rpc_status (*recv_plist)(rpc_t self, const plist_t rpc_dict);
  
      // Calls send_plist.
      rpc_status (*send_reportIdentifier)(rpc_t self,
              const char *connection_id);
  
      rpc_status (*send_getConnectedApplications)(rpc_t self,
              const char *connection_id);
  
      rpc_status (*send_forwardGetListing)(rpc_t self,
              const char *connection_id, const char *app_id);
  
      rpc_status (*send_forwardIndicateWebView)(rpc_t self,
              const char *connection_id, const char *app_id,
              uint32_t page_id, bool is_enabled);
  
      rpc_status (*send_forwardSocketSetup)(rpc_t self,
              const char *connection_id, const char *app_id,
              uint32_t page_id, const char *sender_id);
  
      rpc_status (*send_forwardSocketData)(rpc_t self,
              const char *connection_id, const char *app_id,
              uint32_t page_id, const char *sender_id,
              const char *data, size_t length);
  
      rpc_status (*send_forwardDidClose)(rpc_t self,
              const char *connection_id, const char *app_id,
              uint32_t page_id, const char *sender_id);
  
      void *state;
  
      //
      // Set these callbacks:
      //
  
      rpc_status (*send_plist)(rpc_t self, plist_t rpc_dict);
  
      rpc_status (*on_reportSetup)(rpc_t self);
  
      rpc_status (*on_reportConnectedApplicationList)(rpc_t self,
              const rpc_app_t *apps);
  
      rpc_status (*on_applicationConnected)(rpc_t self,
              const rpc_app_t app);
  
      rpc_status (*on_applicationDisconnected)(rpc_t self,
              const rpc_app_t app);
  
      rpc_status (*on_applicationSentListing)(rpc_t self,
              const char *app_id, const rpc_page_t *pages);
  
      rpc_status (*on_applicationSentData)(rpc_t self,
              const char *app_id, const char *dest_id,
              const char *data, size_t length);
  
      rpc_status (*on_applicationUpdated)(rpc_t self,
              const char *app_id, const char *dest_id);
  
      // For internal use only:
      rpc_status (*on_error)(rpc_t self, const char *format, ...);
  };
  
  
  #ifdef	__cplusplus
  }
  #endif
  
  #endif	/* RPC_H */
  