main.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "libpsiphontunnel.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. char *read_file(char *filename) {
  6. char *buffer = NULL;
  7. size_t size = 0;
  8. FILE *fp = fopen(filename, "r");
  9. if (!fp) {
  10. return NULL;
  11. }
  12. fseek(fp, 0, SEEK_END);
  13. size = ftell(fp);
  14. rewind(fp);
  15. buffer = malloc((size + 1) * sizeof(*buffer));
  16. fread(buffer, size, 1, fp);
  17. buffer[size] = '\0';
  18. return buffer;
  19. }
  20. int main(int argc, char *argv[]) {
  21. // load config
  22. char * const default_config = "psiphon_config";
  23. char * config = argv[1];
  24. if (!config) {
  25. config = default_config;
  26. printf("Using default config file: %s\n", default_config);
  27. }
  28. char *psiphon_config = read_file(config);
  29. if (!psiphon_config) {
  30. printf("Could not find config file: %s\n", config);
  31. return 1;
  32. }
  33. // set server list
  34. char *server_list = "";
  35. // set client platform
  36. char * const os = "OSName"; // "Android", "iOS", "Windows", etc.
  37. char * const os_version = "OSVersion"; // "4.0.4", "10.3", "10.0.10240", etc.
  38. char * const bundle_identifier = "com.example.exampleClientLibraryApp";
  39. char * client_platform = (char *)malloc(sizeof(char) * (strlen(os) + strlen(os_version) + strlen(bundle_identifier) + 4)); // 4 for 3 underscores and null terminating character
  40. int n = sprintf(client_platform, "%s_%s_%s", os, os_version, bundle_identifier);
  41. // set network ID
  42. char * const network_id = "TEST";
  43. // set timeout
  44. int32_t timeout = 60;
  45. struct Parameters params;
  46. params.sizeofStruct = sizeof(struct Parameters);
  47. params.dataRootDirectory = ".";
  48. params.clientPlatform = client_platform;
  49. params.networkID = network_id;
  50. params.establishTunnelTimeoutSeconds = &timeout;
  51. // connect 5 times
  52. for (int i = 0; i < 5; i++) {
  53. // start will return once Psiphon connects or does not connect for timeout seconds
  54. char *result = PsiphonTunnelStart(psiphon_config, server_list, &params);
  55. // print results
  56. printf("Result: %s\n", result);
  57. // The underlying memory of `result` is managed by PsiphonTunnel and is freed in Stop
  58. PsiphonTunnelStop();
  59. }
  60. free(client_platform);
  61. client_platform = NULL;
  62. free(psiphon_config);
  63. psiphon_config = NULL;
  64. }