GPWNetwork.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /* GPWNetwork.cpp/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
  2. /* This copyright was auto-generated on Sat Mar 5 01:05:53 UTC 2022 */
  3. #include "GPWNetwork.h"
  4. WSASession::WSASession()
  5. {
  6. int ret = WSAStartup(MAKEWORD(2, 2), &data);
  7. if (ret != 0)
  8. throw std::system_error(WSAGetLastError(), std::system_category(), "WSAStartup Failed");
  9. }
  10. WSASession::~WSASession()
  11. {
  12. WSACleanup();
  13. }
  14. UDPSocket::UDPSocket()
  15. {
  16. sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  17. if (sock == INVALID_SOCKET)
  18. {
  19. int blah = WSAGetLastError();
  20. printf("error opening socket %d", blah);
  21. throw std::system_error(WSAGetLastError(), std::system_category(), "Error opening socket");
  22. }
  23. }
  24. UDPSocket::~UDPSocket()
  25. {
  26. closesocket(sock);
  27. }
  28. void UDPSocket::SendTo(const std::string& address, unsigned short port, const char* buffer, int len, int flags)
  29. {
  30. sockaddr_in add;
  31. add.sin_family = AF_INET;
  32. InetPtonA(AF_INET, (PCSTR)(address.c_str()), &add.sin_addr.s_addr);
  33. add.sin_port = htons(port);
  34. int ret = sendto(sock, buffer, len, flags, reinterpret_cast<SOCKADDR *>(&add), sizeof(add));
  35. if (ret < 0)
  36. throw std::system_error(WSAGetLastError(), std::system_category(), "sendto failed");
  37. }
  38. sockaddr_in UDPSocket::RecvFrom(char* buffer, int len, int& received, int flags)
  39. {
  40. sockaddr_in from;
  41. int size = sizeof(from);
  42. int ret = recvfrom(sock, buffer, len, flags, reinterpret_cast<SOCKADDR *>(&from), &size);
  43. if (ret < 0)
  44. throw std::system_error(WSAGetLastError(), std::system_category(), "recvfrom failed");
  45. received = ret;
  46. return from;
  47. }
  48. void UDPSocket::Bind(unsigned short port)
  49. {
  50. sockaddr_in add;
  51. add.sin_family = AF_INET;
  52. add.sin_addr.s_addr = htonl(INADDR_ANY);
  53. add.sin_port = htons(port);
  54. int ret = bind(sock, reinterpret_cast<SOCKADDR *>(&add), sizeof(add));
  55. if (ret < 0)
  56. throw std::system_error(WSAGetLastError(), std::system_category(), "Bind failed");
  57. }