main.cpp 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <string.h>
  4. extern "C" {
  5. #include "libmumble.h"
  6. }
  7. static int verify_cert(uint8_t* x509_pem_certificates, uint32_t size)
  8. {
  9. printf("I received a buffer of %d bytes!\n", size);
  10. const char FILENAME[] = "/tmp/cert";
  11. FILE* outfile = fopen(FILENAME, "wb");
  12. if (outfile != NULL)
  13. {
  14. fwrite(x509_pem_certificates, 1, size, outfile);
  15. fclose(outfile);
  16. printf("Written to %s\n", FILENAME);
  17. }
  18. // Accept every cert
  19. return 1;
  20. }
  21. void mumble_version_callback(uint16_t major, uint8_t minor, uint8_t patch, char* release, char* os, char* os_version)
  22. {
  23. printf("Version Callback: v%d.%d.%d. %s/%s/%s\n", major, minor, patch, release, os, os_version);
  24. }
  25. void mumble_audio_callback(uint8_t* audio_data, uint32_t audio_data_size)
  26. {
  27. printf("I received %d bytes of audio data\n", audio_data_size);
  28. }
  29. void mumble_serversync_callback(char* welcome_text, int32_t session, int32_t max_bandwidth, int64_t permissions)
  30. {
  31. printf("%s\n", welcome_text);
  32. }
  33. void mumble_channelremove_callback(uint32_t channel_id)
  34. {
  35. printf("Channel %d removed\n", channel_id);
  36. }
  37. void mumble_channelstate_callback(char* name, int32_t channel_id, int32_t parent, char* description, uint32_t* links, uint32_t n_links, uint32_t* links_add, uint32_t n_links_add, uint32_t* links_remove, uint32_t n_links_remove, int32_t temporary, int32_t position)
  38. {
  39. printf("Obtained channel state\n");
  40. }
  41. void mumble_userremove_callback(uint32_t session, int32_t actor, char* reason, int32_t ban)
  42. {
  43. printf("User %d removed\n", actor);
  44. }
  45. void mumble_userstate_callback(int32_t session, int32_t actor, char* name, int32_t user_id, int32_t channel_id, int32_t mute, int32_t deaf, int32_t suppress, int32_t self_mute, int32_t self_deaf, char* comment, int32_t priority_speaker, int32_t recording)
  46. {
  47. printf("userstate_callback\n");
  48. }
  49. void mumble_banlist_callback(uint8_t* ip_data, uint32_t ip_data_size, uint32_t mask, char* name, char* hash, char* reason, char* start, int32_t duration)
  50. {
  51. printf("banlist_callback\n");
  52. }
  53. void mumble_textmessage_callback(uint32_t actor, uint32_t n_session, uint32_t* session, uint32_t n_channel_id, uint32_t* channel_id, uint32_t n_tree_id, uint32_t* tree_id, char* message)
  54. {
  55. printf("textmessage_callback\n");
  56. }
  57. void mumble_permissiondenied_callback(int32_t permission, int32_t channel_id, int32_t session, char* reason, int32_t deny_type, char* name)
  58. {
  59. printf("permissiondenied_callback\n");
  60. }
  61. void mumble_acl_callback(void)
  62. {
  63. printf("acl_callback\n");
  64. }
  65. void mumble_queryusers_callback(uint32_t n_ids, uint32_t* ids, uint32_t n_names, char** names)
  66. {
  67. printf("queryusers_callback\n");
  68. }
  69. void mumble_cryptsetup_callback(uint32_t key_size, uint8_t* key, uint32_t client_nonce_size, uint8_t* client_nonce, uint32_t server_nonce_size, uint8_t* server_nonce)
  70. {
  71. printf("cryptsetup_callback\n");
  72. }
  73. void mumble_contextactionmodify_callback(char* action, char* text, uint32_t m_context, uint32_t operation)
  74. {
  75. printf("contextactionmodify_callback\n");
  76. }
  77. void mumble_contextaction_callback(int32_t session, int32_t channel_id, char* action)
  78. {
  79. printf("contextaction_callback\n");
  80. }
  81. void mumble_userlist_callback(uint32_t user_id, char* name, char* last_seen, int32_t last_channel)
  82. {
  83. printf("userlist_callback\n");
  84. }
  85. void mumble_voicetarget_callback(void)
  86. {
  87. printf("voicetarget_callback\n");
  88. }
  89. void mumble_permissionquery_callback(int32_t channel_id, uint32_t permissions, int32_t flush)
  90. {
  91. printf("permissionquery_callback\n");
  92. }
  93. void mumble_codecversion_callback(int32_t alpha, int32_t beta, uint32_t prefer_alpha, int32_t opus)
  94. {
  95. printf("codecversion_callback\n");
  96. }
  97. void mumble_userstats_callback(void)
  98. {
  99. printf("userstats_callback\n");
  100. }
  101. void mumble_requestblob_callback(void)
  102. {
  103. printf("requestblob_callback\n");
  104. }
  105. void mumble_serverconfig_callback(uint32_t max_bandwidth, char* welcome_text, uint32_t allow_html, uint32_t message_length, uint32_t image_message_length)
  106. {
  107. printf("serverconfig_callback\n");
  108. }
  109. void mumble_suggestconfig_callback(uint32_t version, uint32_t positional, uint32_t push_to_talk)
  110. {
  111. printf("suggestconfig_callback\n");
  112. }
  113. int main(int argc, char* argv[])
  114. {
  115. if (argc < 2)
  116. {
  117. printf("Usage: %s <mumble server ip> [mumble server port] [server password]\n", argv[0]);
  118. return -1;
  119. }
  120. char* host = argv[1];
  121. char* port = "64738";
  122. char* password = "hello";
  123. if (argc >= 3)
  124. {
  125. port = argv[2];
  126. }
  127. if (argc >= 4)
  128. {
  129. password = argv[3];
  130. }
  131. struct mumble_config config;
  132. memset(&config, 0, sizeof(config));
  133. config.size = sizeof(config);
  134. config.host = host;
  135. config.port = port;
  136. config.server_password = password;
  137. config.username = "example_username";
  138. config.user_cert_filename = NULL;
  139. config.user_privkey_filename = NULL;
  140. config.ssl_verification_callback = verify_cert;
  141. config.version_callback = mumble_version_callback;
  142. config.audio_callback = mumble_audio_callback;
  143. config.serversync_callback = mumble_serversync_callback;
  144. config.channelremove_callback = mumble_channelremove_callback;
  145. config.channelstate_callback = mumble_channelstate_callback;
  146. config.userremove_callback = mumble_userremove_callback;
  147. config.userstate_callback = mumble_userstate_callback;
  148. config.banlist_callback = mumble_banlist_callback;
  149. config.textmessage_callback = mumble_textmessage_callback;
  150. config.permissiondenied_callback = mumble_permissiondenied_callback;
  151. config.acl_callback = mumble_acl_callback;
  152. config.queryusers_callback = mumble_queryusers_callback;
  153. config.cryptsetup_callback = mumble_cryptsetup_callback;
  154. config.contextactionmodify_callback = mumble_contextactionmodify_callback;
  155. config.contextaction_callback = mumble_contextaction_callback;
  156. config.userlist_callback = mumble_userlist_callback;
  157. config.voicetarget_callback = mumble_voicetarget_callback;
  158. config.permissionquery_callback = mumble_permissionquery_callback;
  159. config.codecversion_callback = mumble_codecversion_callback;
  160. config.userstats_callback = mumble_userstats_callback;
  161. config.requestblob_callback = mumble_requestblob_callback;
  162. config.serverconfig_callback = mumble_serverconfig_callback;
  163. config.suggestconfig_callback = mumble_suggestconfig_callback;
  164. struct mumble_struct* mumble = mumble_connect(NULL, &config);
  165. if (mumble == NULL)
  166. {
  167. printf("Couldn't establish mumble connection\n");
  168. return -1;
  169. }
  170. // Start processing here?
  171. int quit = 0;
  172. while (quit == 0)
  173. {
  174. if (mumble_tick(mumble) < 0)
  175. {
  176. quit = 1;
  177. }
  178. // Other processing here?
  179. }
  180. mumble_close(mumble);
  181. printf("Done\n");
  182. return 0;
  183. }