Big code refactoring #10
@@ -17,9 +17,10 @@ extern "C" {
 | 
				
			|||||||
#include <netinet/in.h>
 | 
					#include <netinet/in.h>
 | 
				
			||||||
#include <linux/netlink.h>
 | 
					#include <linux/netlink.h>
 | 
				
			||||||
#include <linux/rtnetlink.h>
 | 
					#include <linux/rtnetlink.h>
 | 
				
			||||||
// #include <malloc.h>
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <iostream>
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <sys/ioctl.h>
 | 
				
			||||||
 | 
					#include <net/if.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
std::string getWireguardVersion() {
 | 
					std::string getWireguardVersion() {
 | 
				
			||||||
  return "Kernel";
 | 
					  return "Kernel";
 | 
				
			||||||
@@ -76,7 +77,7 @@ void WireguardConfig::getWireguardConfig() {
 | 
				
			|||||||
  if ((status = wg_get_device(&devConfig, this->name.c_str())) < 0) throw std::string("It was not possible to get the Wireguard interface settings, code: ").append(std::to_string(status));
 | 
					  if ((status = wg_get_device(&devConfig, this->name.c_str())) < 0) throw std::string("It was not possible to get the Wireguard interface settings, code: ").append(std::to_string(status));
 | 
				
			||||||
  if (devConfig->flags & WGDEVICE_HAS_PRIVATE_KEY) this->privateKey = wgKeys::toString(devConfig->private_key);
 | 
					  if (devConfig->flags & WGDEVICE_HAS_PRIVATE_KEY) this->privateKey = wgKeys::toString(devConfig->private_key);
 | 
				
			||||||
  if (devConfig->flags & WGDEVICE_HAS_PUBLIC_KEY) this->publicKey = wgKeys::toString(devConfig->public_key);
 | 
					  if (devConfig->flags & WGDEVICE_HAS_PUBLIC_KEY) this->publicKey = wgKeys::toString(devConfig->public_key);
 | 
				
			||||||
  if (devConfig->flags & WGDEVICE_HAS_LISTEN_PORT) this->portListen = devConfig->listen_port;
 | 
					  if (!!devConfig->listen_port && devConfig->listen_port > 0) this->portListen = devConfig->listen_port;
 | 
				
			||||||
  this->interfaceAddress.GetInInterface(this->name);
 | 
					  this->interfaceAddress.GetInInterface(this->name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for ((peer) = (devConfig)->first_peer; (peer); (peer) = (peer)->next_peer) {
 | 
					  for ((peer) = (devConfig)->first_peer; (peer); (peer) = (peer)->next_peer) {
 | 
				
			||||||
@@ -395,10 +396,25 @@ void IpManeger::SetInInterface(std::string interfaceName) {
 | 
				
			|||||||
    lcl.bitlen = (req.ifa.ifa_family == AF_INET) ? 32 : 128;
 | 
					    lcl.bitlen = (req.ifa.ifa_family == AF_INET) ? 32 : 128;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (inet_pton(req.ifa.ifa_family, ip.Address.c_str(), &lcl.data) <= 0) throw std::string("Invalid IP address: ").append(ip.Address);
 | 
					    if (inet_pton(req.ifa.ifa_family, ip.Address.c_str(), &lcl.data) <= 0) throw std::string("Invalid IP address: ").append(ip.Address);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (req.ifa.ifa_family == AF_UNSPEC) req.ifa.ifa_family = lcl.family;
 | 
					    if (req.ifa.ifa_family == AF_UNSPEC) req.ifa.ifa_family = lcl.family;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    addattr_l(&req.n, sizeof(req), IFA_LOCAL, &lcl.data, lcl.bytelen);
 | 
					    addattr_l(&req.n, sizeof(req), IFA_LOCAL, &lcl.data, lcl.bytelen);
 | 
				
			||||||
    if ((err = rtnl_talk(rth, &req.n, 0, 0, NULL)) < 0) throw std::string("Cannot set interface IP, code: ").append(std::to_string(err));
 | 
					    if ((err = rtnl_talk(rth, &req.n, 0, 0, NULL)) < 0) throw std::string("Cannot set interface IP, code: ").append(std::to_string(err));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Get INET socket
 | 
				
			||||||
 | 
					  int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
 | 
				
			||||||
 | 
					  if (sockfd < 0) throw std::string("Error creating socket to set interface flags");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  struct ifreq ifr;
 | 
				
			||||||
 | 
					  strcpy(ifr.ifr_name, interfaceName.c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Set interface flags
 | 
				
			||||||
 | 
					  ifr.ifr_flags = IFF_POINTOPOINT | IFF_NOARP | IFF_UP | IFF_RUNNING;
 | 
				
			||||||
 | 
					  if (ioctl(sockfd, SIOCSIFFLAGS, &ifr) < 0) {
 | 
				
			||||||
 | 
					    close(sockfd);
 | 
				
			||||||
 | 
					    throw std::string("Error setting interface flags");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  close(sockfd);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					#include "wginterface.hh"
 | 
				
			||||||
 | 
					#include "genKey/wgkeys.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WireguardDevices::getInterfaces() {}
 | 
				
			||||||
 | 
					void WireguardDevices::deleteInterface(std::string wgName) {
 | 
				
			||||||
 | 
					  throw std::string("Use userspace module");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WireguardConfig::getWireguardConfig() {
 | 
				
			||||||
 | 
					  throw std::string("Use userspace module");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WireguardConfig::setWireguardConfig() {
 | 
				
			||||||
 | 
					  throw std::string("Use userspace module");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										30
									
								
								addon/win/wgip.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								addon/win/wgip.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					#include "wginterface.hh"
 | 
				
			||||||
 | 
					#include <windows.h>
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <comdef.h>
 | 
				
			||||||
 | 
					#include <Wbemidl.h>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma comment(lib, "wbemuuid.lib")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SetIPAddress(IWbemServices* pSvc, IWbemClassObject* pclsObj, const wchar_t* propertyName, const wchar_t* ip) {
 | 
				
			||||||
 | 
					  VARIANT vtProp;
 | 
				
			||||||
 | 
					  HRESULT hres = pclsObj->Get(propertyName, 0, &vtProp, 0, 0);
 | 
				
			||||||
 | 
					  if (SUCCEEDED(hres)) {
 | 
				
			||||||
 | 
					    vtProp.vt = VT_BSTR;
 | 
				
			||||||
 | 
					    vtProp.bstrVal = SysAllocString(ip);
 | 
				
			||||||
 | 
					    hres = pclsObj->Put(propertyName, 0, &vtProp, 0);
 | 
				
			||||||
 | 
					    VariantClear(&vtProp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (FAILED(hres)) {
 | 
				
			||||||
 | 
					      std::cerr << "Failed to set " << propertyName << ". Error code: " << hres << std::endl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IpManeger::SetInInterface(std::string interfaceName) {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void IpManeger::GetInInterface(std::string interfaceName) {
 | 
				
			||||||
 | 
					  throw std::string("Use userspace module");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								binding.yaml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								binding.yaml
									
									
									
									
									
								
							@@ -24,6 +24,16 @@ target:
 | 
				
			|||||||
      - "-w"
 | 
					      - "-w"
 | 
				
			||||||
      - "-fpermissive"
 | 
					      - "-fpermissive"
 | 
				
			||||||
      - "-fPIC"
 | 
					      - "-fPIC"
 | 
				
			||||||
 | 
					  windows:
 | 
				
			||||||
 | 
					    sources:
 | 
				
			||||||
 | 
					      - "!addon/dummy/wginterface.cpp"
 | 
				
			||||||
 | 
					      - "addon/win/wginterface.cpp"
 | 
				
			||||||
 | 
					      - "addon/win/wgip.cpp"
 | 
				
			||||||
 | 
					    libraries:
 | 
				
			||||||
 | 
					      - wbemuuid.lib
 | 
				
			||||||
 | 
					    defines:
 | 
				
			||||||
 | 
					      - "_HAS_EXCEPTIONS=1"
 | 
				
			||||||
 | 
					      - "ONSTARTADDON"
 | 
				
			||||||
  macos:
 | 
					  macos:
 | 
				
			||||||
    flags:
 | 
					    flags:
 | 
				
			||||||
      - "!-fno-exceptions"
 | 
					      - "!-fno-exceptions"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user