summary refs log tree commit diff
diff options
context:
space:
mode:
authorNewe <speedy.wolfy@outlook.com>2021-05-21 15:48:56 +0200
committerNewe <speedy.wolfy@outlook.com>2021-05-21 15:48:56 +0200
commitf8eceb3124ac4149f180b496082d9965f6b8c1b6 (patch)
tree47487bac892663390c61c622acc2e2dec7606b64
parent[edit] Set rpcStub.server to public (diff)
downloadserver-f8eceb3124ac4149f180b496082d9965f6b8c1b6.tar.xz
[edit] Hypothetical gRPC handshake
-rw-r--r--.gitignore4
-rw-r--r--src/main.cpp45
-rw-r--r--src/protodefs/protos.proto4
-rw-r--r--src/rpcStub.cpp38
-rw-r--r--src/rpcStub.hpp7
-rw-r--r--src/rtcPeerHandler.cpp94
-rw-r--r--src/rtcPeerHandler.hpp5
7 files changed, 119 insertions, 78 deletions
diff --git a/.gitignore b/.gitignore

index 788c5adb..539bb001 100644 --- a/.gitignore +++ b/.gitignore
@@ -29,6 +29,10 @@ # Executables *.o +# Protobuffer builds +*.pb.cc +*.pb.h + # Directories build/ .vscode/ diff --git a/src/main.cpp b/src/main.cpp
index 88adc97c..2fdeceee 100644 --- a/src/main.cpp +++ b/src/main.cpp
@@ -1,37 +1,36 @@ // $$$$$$\ $$\ -// $$ __$$\ $$ | -// $$ / \__|$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$\ $$$$$$$ | -// $$$$\ $$ __$$\ $$ _____|$$ _____|$$ _____|$$ __$$\ $$ __$$\ $$ __$$ | -// $$ _| $$ / $$ |\$$$$$$\ \$$$$$$\ $$ / $$ / $$ |$$ | \__|$$ / $$ | -// $$ | $$ | $$ | \____$$\ \____$$\ $$ | $$ | $$ |$$ | $$ | $$ | -// $$ | \$$$$$$ |$$$$$$$ |$$$$$$$ |\$$$$$$$\ \$$$$$$ |$$ | \$$$$$$$ | -// \__| \______/ \_______/ \_______/ \_______| \______/ \__| \_______| -// -// -// +// $$ __$$\ $$ | +// $$ / \__|$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$\ $$$$$$$ | +// $$$$\ $$ __$$\ $$ _____|$$ _____|$$ _____|$$ __$$\ $$ __$$\ $$ __$$ | +// $$ _| $$ / $$ |\$$$$$$\ \$$$$$$\ $$ / $$ / $$ |$$ | \__|$$ / $$ | +// $$ | $$ | $$ | \____$$\ \____$$\ $$ | $$ | $$ |$$ | $$ | $$ | +// $$ | \$$$$$$ |$$$$$$$ |$$$$$$$ |\$$$$$$$\ \$$$$$$ |$$ | \$$$$$$$ | +// \__| \______/ \_______/ \_______/ \_______| \______/ \__| \_______| +// +// +// // $$\ $$$$$$\ // \__| $$ __$$\ // $$\ $$\ $$$$$$\ $$\ $$$$$$$\ $$$$$$\ $$ / \__| $$$$$$\ $$$$$$\ $$\ $$\ $$$$$$\ $$$$$$\ // \$$\ $$ |$$ __$$\ $$ |$$ _____|$$ __$$\ \$$$$$$\ $$ __$$\ $$ __$$\\$$\ $$ |$$ __$$\ $$ __$$\ // \$$\$$ / $$ / $$ |$$ |$$ / $$$$$$$$ | \____$$\ $$$$$$$$ |$$ | \__|\$$\$$ / $$$$$$$$ |$$ | \__| -// \$$$ / $$ | $$ |$$ |$$ | $$ ____|$$\ $$ |$$ ____|$$ | \$$$ / $$ ____|$$ | -// \$ / \$$$$$$ |$$ |\$$$$$$$\ \$$$$$$$\ \$$$$$$ |\$$$$$$$\ $$ | \$ / \$$$$$$$\ $$ | -// \_/ \______/ \__| \_______| \_______| \______/ \_______|\__| \_/ \_______|\__| -// -// -// +// \$$$ / $$ | $$ |$$ |$$ | $$ ____|$$\ $$ |$$ ____|$$ | \$$$ / $$ ____|$$ | +// \$ / \$$$$$$ |$$ |\$$$$$$$\ \$$$$$$$\ \$$$$$$ |\$$$$$$$\ $$ | \$ / \$$$$$$$\ $$ | +// \_/ \______/ \__| \_______| \_______| \______/ \_______|\__| \_/ \_______|\__| +// +// +// +#include "rtcPeerHandler.hpp" //Handle peer connection requests +#include "rpcStub.hpp" //Handle gRPC communications between the different fosscord elements -#include "rtcPeerHandler.hpp" //HAndle peer connection requests -#include "rpcStub.hpp" //Handle gRPC communications between the different fosscord elements - -int main (int argc, char** argv){ +int main(int argc, char **argv){ auto commsHandler = std::make_shared<rtcPeerHandler>(); - auto rpcHandler = std::unique_ptr<rpcStub>(); + auto rpcHandler = std::unique_ptr<rpcStub>(new rpcStub(commsHandler, 8057)); - std::cout << "Server created" <<std::endl; + std::cout << "Server created" << std::endl; //rpcHandler->server->Wait(); //blocking, this will need to be threaded - return 0; + return 0; } \ No newline at end of file diff --git a/src/protodefs/protos.proto b/src/protodefs/protos.proto
index a8c9f845..11face5f 100644 --- a/src/protodefs/protos.proto +++ b/src/protodefs/protos.proto
@@ -3,13 +3,13 @@ syntax = "proto3"; package fosscordMedia; service fosscordInternals{ - rpc requestProtocol(voiceRequest) returns (voiceAnswer) {} + rpc vRequest(voiceRequest) returns (voiceAnswer) {} } message voiceRequest{ //OP1 from gw uint64 userid = 1; uint64 guildid = 2; - string IP=3; + string ip=3; uint32 port=4; string protocol=5; string rtcConnectionId=6; diff --git a/src/rpcStub.cpp b/src/rpcStub.cpp
index 3d848924..1633aab8 100644 --- a/src/rpcStub.cpp +++ b/src/rpcStub.cpp
@@ -1,24 +1,32 @@ #include "rpcStub.hpp" -class fossCordInternalsImpl final : public fosscordMedia::fosscordInternals::Service{ - grpc::Status sendRequest( - grpc::ServerContext* ctx, - const fosscordMedia::rpcRequest* req, - fosscordMedia::rpcResponse* resp - ) override{ - resp->set_b(333); - return grpc::Status::OK; +class fossCordInternalsImpl final : public fosscordMedia::fosscordInternals::Service { + std::shared_ptr<rtcPeerHandler> ph; + fossCordInternalsImpl(std::shared_ptr<rtcPeerHandler> handler){ + this->ph= handler; } + grpc::Status vRequest(grpc::ServerContext* ctx, + const fosscordMedia::voiceRequest* req, + fosscordMedia::voiceAnswer* resp) override { + this->ph->initiateConnection(req->ip(), req->port()); + return grpc::Status::OK; + } }; -rpcStub::rpcStub(int port){ - grpc::ServerBuilder builder; +rpcStub::rpcStub(std::shared_ptr<rtcPeerHandler> handler, int port) { + if (not port) { + port = 8057; + } + this->ph = handler; - fossCordInternalsImpl* service; - builder.AddListeningPort("0.0.0.0:8057", grpc::InsecureServerCredentials() ); - builder.RegisterService(service); + fossCordInternalsImpl* service; + grpc::ServerBuilder builder; + builder.AddListeningPort("0.0.0.0:" + std::to_string(port), + grpc::InsecureServerCredentials()); + builder.RegisterService(service); - std::unique_ptr<grpc::Server> server(builder.BuildAndStart()); - std::cout << "Server listening on port 8057 " << std::endl; + this->server = builder.BuildAndStart(); + + std::cout << "RPC stub listening on port " << port << std::endl; } \ No newline at end of file diff --git a/src/rpcStub.hpp b/src/rpcStub.hpp
index 99d6d582..f567cd97 100644 --- a/src/rpcStub.hpp +++ b/src/rpcStub.hpp
@@ -1,11 +1,12 @@ #include <grpc++/grpc++.h> #include "protodefs/include/protos.grpc.pb.h" +#include "rtcPeerHandler.hpp" class rpcStub{ public: - rpcStub(int port); + rpcStub(std::shared_ptr<rtcPeerHandler> peerHandler, int port); std::unique_ptr<grpc::Server> server; - private: - + private: + std::shared_ptr<rtcPeerHandler> ph; }; \ No newline at end of file diff --git a/src/rtcPeerHandler.cpp b/src/rtcPeerHandler.cpp
index 4696c4c7..9bfc6466 100644 --- a/src/rtcPeerHandler.cpp +++ b/src/rtcPeerHandler.cpp
@@ -1,45 +1,44 @@ #include "rtcPeerHandler.hpp" -rtcPeerHandler::rtcPeerHandler() -{ - rtc::InitLogger(rtc::LogLevel::Verbose, NULL); -} -void rtcPeerHandler::initiateConnection(std::string peerIP, int peerPort) -{ - //Socket connection between client and server - SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); - sockaddr_in addr; - addr.sin_addr.s_addr = inet_addr(peerIP.c_str()); - addr.sin_port = htons(peerPort); - addr.sin_family = AF_INET; +rtcPeerHandler::rtcPeerHandler() { + rtc::InitLogger(rtc::LogLevel::Verbose, NULL); +} - rtc::Configuration conf; - conf.enableIceTcp = false; - conf.disableAutoNegotiation = false; +void rtcPeerHandler::initiateConnection(std::string peerIP, int peerPort) { + // Socket connection between client and server + SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); + sockaddr_in addr; + addr.sin_addr.s_addr = inet_addr(peerIP.c_str()); + addr.sin_port = htons(peerPort); + addr.sin_family = AF_INET; - auto pc = std::make_shared<rtc::PeerConnection>(conf); + rtc::Configuration conf; + conf.enableIceTcp = false; + conf.disableAutoNegotiation = false; - rtc::Description::Audio media("audio", rtc::Description::Direction::SendRecv); - media.addOpusCodec(96); - media.setBitrate(64); + auto pc = std::make_shared<rtc::PeerConnection>(conf); + rtc::Description::Audio media("audio", + rtc::Description::Direction::SendRecv); + media.addOpusCodec(96); + media.setBitrate(64); - auto track = pc->addTrack(media); + auto track = pc->addTrack(media); - //auto session = std::make_shared<rtc::MediaHandler>(); + // auto session = std::make_shared<rtc::MediaHandler>(); - //track->setMediaHandler(session); + // track->setMediaHandler(session); - rtc::Reliability rtcRel; - rtcRel.unordered = true; - rtcRel.type = rtc::Reliability::Type::Timed; - rtcRel.rexmit = 500; + rtc::Reliability rtcRel; + rtcRel.unordered = true; + rtcRel.type = rtc::Reliability::Type::Timed; + rtcRel.rexmit = 500; - rtc::DataChannelInit rtcConf; - rtcConf.reliability = rtcRel; - rtcConf.negotiated = false; + rtc::DataChannelInit rtcConf; + rtcConf.reliability = rtcRel; + rtcConf.negotiated = false; - pc->onStateChange([](rtc::PeerConnection::State state) { + pc->onStateChange([](rtc::PeerConnection::State state) { std::cout << "State: " << state << std::endl; if (state == rtc::PeerConnection::State::Disconnected || state == rtc::PeerConnection::State::Failed || @@ -48,10 +47,37 @@ void rtcPeerHandler::initiateConnection(std::string peerIP, int peerPort) } }); - pc->onGatheringStateChange( - [](rtc::PeerConnection::GatheringState state) { std::cout << "Gathering State: " << state << std::endl; }); + pc->onGatheringStateChange([](rtc::PeerConnection::GatheringState state) { + std::cout << "Gathering State: " << state << std::endl; + }); + + /*std::tuple<rtc::Track*, rtc::RtcpSrReporter*> addAudio( + + const std::shared_ptr<rtc::PeerConnection> pc, + const uint8_t payloadType, const uint32_t ssrc, const std::string cname, + const std::string msid, const std::function<void(void)> onOpen) { + auto audio = Description::Audio(cname); + audio.addOpusCodec(payloadType); + audio.addSSRC(ssrc, cname, msid, cname); + auto track = pc->addTrack(audio); + // create RTP configuration + auto rtpConfig = make_shared<RtpPacketizationConfig>( + ssrc, cname, payloadType, OpusRtpPacketizer::defaultClockRate); + // create packetizer + auto packetizer = make_shared<OpusRtpPacketizer>(rtpConfig); + // create opus handler + auto opusHandler = make_shared<OpusPacketizationHandler>(packetizer); + + // add RTCP SR handler + auto srReporter = make_shared<RtcpSrReporter>(rtpConfig); + opusHandler->addToChain(srReporter); + // set handler + track->setMediaHandler(opusHandler); + track->onOpen(onOpen); + auto trackData = make_shared<ClientTrackData>(track, srReporter); + return trackData; + }*/ - pc->createDataChannel("Fosscord voice connection", rtcConf); + pc->createDataChannel("Fosscord voice connection", rtcConf); } - \ No newline at end of file diff --git a/src/rtcPeerHandler.hpp b/src/rtcPeerHandler.hpp
index 030f41fa..3ba32a83 100644 --- a/src/rtcPeerHandler.hpp +++ b/src/rtcPeerHandler.hpp
@@ -13,6 +13,8 @@ typedef int SOCKET; using json = nlohmann::json; +#ifndef RTCPEERHANDLER +#define RTCPEERHANDLER class rtcPeerHandler{ public: rtcPeerHandler(); @@ -26,4 +28,5 @@ public: private: std::map<SOCKET, client> clients; -}; \ No newline at end of file +}; +#endif \ No newline at end of file