14 Commits

Author SHA1 Message Date
05655e2da1 modified README 2025-02-27 17:21:21 +00:00
ed8d2be205 added version 3 2025-02-27 17:19:56 +00:00
Akilan Selvacoumar
30cd9c1901 Update README.md 2025-01-29 17:17:02 +00:00
d9d5ebe475 Merge branch 'master' of github.com:Akilan1999/p2p-rendering-computation 2025-01-29 17:12:00 +00:00
23abbc8f90 added base tutorial for running nix 2025-01-29 17:11:43 +00:00
Akilan Selvacoumar
5c0bcfd4cf Update README.md 2025-01-28 16:17:36 +00:00
9b255265c4 added docs changes 2025-01-28 16:15:42 +00:00
075d1850f6 Merge branch 'master' of github.com:Akilan1999/p2p-rendering-computation 2025-01-27 22:41:12 +00:00
38bef975d5 added initial blog post 2025-01-27 22:41:03 +00:00
Akilan Selvacoumar
5cbc9842b4 Update README.md 2025-01-27 21:26:44 +00:00
4479a79912 pushed commit for remote map port 2025-01-24 22:35:50 +00:00
88a4e02e30 added index.html 2025-01-21 21:25:58 +00:00
ddd6864741 latest git ignore changes 2025-01-21 21:25:21 +00:00
Akilan Selvacoumar
3735ab87e0 Merge pull request #122 from Akilan1999/p2prc-docs
P2PRC docs
2025-01-21 21:14:36 +00:00
17 changed files with 1492 additions and 458 deletions

View File

@@ -135,11 +135,11 @@ func EscapeFirewall(HostOutsideNATIP string, HostOutsideNATPort string, internal
//export MapPort
func MapPort(Port string, DomainName string, ServerAddress string) *C.char {
entireAddress, _, err := abstractions.MapPort(Port, DomainName, ServerAddress)
Address, err := abstractions.MapPort(Port, DomainName, ServerAddress)
if err != nil {
return C.CString(err.Error())
}
return C.CString(entireAddress)
return C.CString(Address.EntireAddress)
}
// --------------------------------- Controlling Server ----------------------------------------

View File

@@ -1,93 +0,0 @@
* Contributing
:PROPERTIES:
:CUSTOM_ID: contributing
:END:
When contributing to this repository, please first discuss the change
you wish to make via issue, email, or any other method with the owners
of this repository before making a change.
Please note we have a code of conduct, please follow it in all your
interactions with the project.
** Pull Request Process
:PROPERTIES:
:CUSTOM_ID: pull-request-process
:END:
1. Ensure any install or build dependencies are removed before the end
of the layer when doing a build.
2. Update the appropriate docs before stating the changes you did.
3. You may merge the Pull Request in once you have the approval of
CODEOWNER, or if you do not have permission to do that, you may
request the second reviewer to merge it for you.
** Code of conduct
:PROPERTIES:
:CUSTOM_ID: code-of-conduct
:END:
All projects(including mailing lists) at HWTechClub is required to
follow [[https://lunduke.com/pages/codeofconduct/][The Lunduke Code of
Conduct]].
*** The Lunduke Code of Conduct
:PROPERTIES:
:CUSTOM_ID: the-lunduke-code-of-conduct
:END:
#+begin_quote
**** "Be Excellent to Each Other."
:PROPERTIES:
:CUSTOM_ID: be-excellent-to-each-other.
:END:
#+end_quote
***** FAQ
:PROPERTIES:
:CUSTOM_ID: faq
:END:
*Q*: Wait. That's it?
A: Yup.
*Q*: But... but... it's only 5 words!
A: It is? Cool!
*Q*: Isn't that too short to be a viable Code of Conduct?
A: Nah.
*Q*: It's too vague! How would you enforce this?!?
A: By being excellent to each other.
*Q*: What if someone violates this Code of Conduct?
A: I trust you to figure it out.
*Q*: What if someone talks about politics I disagree with?!?!!?
A: I know a guy who votes for Papa Smurf in every Presidential election.
He's a pretty cool dude.
*Q*: I'm super angry about something! And a person likes the thing
making me angry! What do I do?
A: I dunno. Try /hugs/?
*Q*: Are virtual hugs (such as /"hugs"/ and animated .GIFs of teddy
bears hugging) excellent?
A: Most excellent.
*Q*: Huh. Seems so simple!
A: I know, right?
*Q*: I like you!
A: I like you, too!
/The Lunduke Code of Conduct is free for you to use however you like./
*Source*: [[https://lunduke.com/pages/codeofconduct/][The Lunduke Code
of Conduct]]

BIN
Docs/.DS_Store vendored

Binary file not shown.

1
Docs/.gitignore vendored
View File

@@ -13,7 +13,6 @@
*.elc
*.fn
*.fns
*.html
*.info
*.ky
*.kys

1299
Docs/index.html Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -93,7 +93,7 @@ To set up the internal dependencies and build the entire go code into a
single binary
#+begin_example
make install
make
#+end_example
**** For Windows
@@ -116,17 +116,6 @@ export P2PRC=/<PATH>/p2p-rendering-computation
export PATH=/<PATH>/p2p-rendering-computation:${PATH}
#+end_example
*** Set up configuration file
:PROPERTIES:
:CUSTOM_ID: set-up-configuration-file
:END:
#+begin_example
make configfile
#+end_example
Open the config file =config.json= and add the IPv6 address if you have
one.
*** Test if binary works
:PROPERTIES:
:CUSTOM_ID: test-if-binary-works
@@ -351,9 +340,15 @@ p2prc --amd "custom metadata"
#+end_example
*** MapPort and link to domain name
Allows to expose remote ports from a machine in the P2P network.
#+begin_example
p2prc --mp <port no to map> --dn <domain name to link Mapped port against>
#+end_example
**** MapPort in remote machine
This is to ensure ports on remote machines on the P2PRC can be easily opened.
#+begin_example
p2prc --mp <port no to map> --dn <domain name to link Mapped port against> --ra <remote server address>
#+end_example
--------------
@@ -628,9 +623,9 @@ func <Function name> (output *C.char) {
:PROPERTIES:
:CUSTOM_ID: current-languages-supported
:END:
- Python
*** Python
*** Build sample python program
**** Build sample python program
:PROPERTIES:
:CUSTOM_ID: build-sample-python-program
:END:
@@ -657,6 +652,11 @@ folder can copied and created as a new git repo for P2PRC extensions
scripted or used a reference point as proof of concept that P2PRC can be
called from other programming languages.
*** Haskell
P2PRC officially supports Haskell bindings and will further support
project using Haskell to build orchestrators on top of P2PRC.
[[https://p2prc.akilan.io/Docs/haskell][Read more...]]
* Config Implementation
:PROPERTIES:
@@ -775,6 +775,88 @@ func main() {
* Blog posts
** Self host within 5 minutes any program
- Author: [[http://akilan.io/][Akilan Selvacoumar]]
- Date: 28-01-2025
- Video tutorial:
[[https://youtu.be/rN4SiVowg5E][https://i3.ytimg.com/vi/rN4SiVowg5E/maxresdefault.jpg]]
This is a fun expirement for anyone to try to quickly run a server and
quickly do a map port and domain name mapping in a single command.
*** 1. Find a program you want to run
Let's try to setup a really easy program (Let's do with Linkwarden
with docker compose :) ). This is under the assumption you have docker
compose installed on your local machine.
**** Let's run Linkwarden using docker compose and P2PRC
[[https://docs.linkwarden.app/self-hosting/installation][Installation instructions]]:
#+BEGIN_SRC
mkdir linkwarden && cd linkwarden
curl -O https://raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml
curl -L https://raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env"
#+END_SRC
Environment configuration
#+BEGIN_SRC
vim .env
# Change values
NEXTAUTH_URL=https://<DOMAIN NAME>/api/v1/auth
NEXTAUTH_SECRET=VERY_SENSITIVE_SECRET
POSTGRES_PASSWORD=CUSTOM_POSTGRES_PASSWORD
#+END_SRC
Run linkwarden!
#+BEGIN_SRC
docker compose up
#+END_SRC
If setup correctly linkwarden should
be running.
Local link: http://localhost:3000
Time to setup P2PRC
[[https://p2prc.akilan.io/Docs/#build-project-and-install-project][Installation Instructions]]
Run p2prc as a background
#+BEGIN_SRC
p2prc -s &
#+END_SRC
Run map port and domain mapping
#+BEGIN_SRC
p2prc --mp 3000 --dn <DOMAIN NAME>
#+END_SRC
Sample response
#+BEGIN_SRC
{
"IPAddress": "217.76.63.222",
"PortNo": "61582",
"EntireAddress": "217.76.63.222:61582"
}
#+END_SRC
Add DNS entry
#+BEGIN_SRC
A entry 217.76.63.222
#+END_SRC
Your done now just head to the DOMAIN NAME you added.
ex: https://linkwarden.akilan.io
* Ideas for future potencial features
Consists of personal loideas for the future of P2PRC.

View File

@@ -47,11 +47,27 @@ Networking details are completely abstracted, enabling users to focus on develop
### Flexible Task Distribution
Users acting as clients retain full control over how tasks are batched and assigned to nodes, creating endless possibilities for optimising performance based on specific use cases.
## Setup with Nix
- Ensure you have the nix package manager installed.
- Add the following to your .bashrc file.
```bash
alias p2prc='env P2PRC=<path you want the configs to exist in> nix run github:akilan1999/p2p-rendering-computation --'
```
- Check if it's successful
```bash
p2prc -h
```
Read more on command usage: https://p2prc.akilan.io/Docs/#using-basic-commands
## Latest tutorial
[![IMAGE ALT TEXT](https://i.ytimg.com/vi/OMwCpedu5cs/hqdefault.jpg)](https://www.youtube.com/watch?v=OMwCpedu5cs")
<br>
## Documentation
### We have documented to our best effort the basics of p2prc: [Link](https://p2prc.akilan.io/Docs/)
<!-- ## Table of contents in the current README -->
<!-- 1. [Introduction](#Introduction)
2. [Installation](#extend-your-application-with-p2prc)
@@ -84,7 +100,7 @@ Users acting as clients retain full control over how tasks are batched and assig
<br>
<!--
<!--
## Introduction
This project aims to create a peer to peer (p2p) network, where a user can use the p2p network to act as a client (i.e sending tasks) or the server (i.e executing the tasks). A prototype application will be developed, which comes bundled with a p2p module and possible to execute docker containers or virtual environments across selected nodes.
@@ -98,7 +114,7 @@ This project aims to create a peer to peer (p2p) network, where a user can use t
<!-- <br> -->
## Extend your application with P2PRC
<!-- ## Extend your application with P2PRC
```go
package main
@@ -127,7 +143,7 @@ func main() {
}
}
```
``` -->
<!-- ### Export once this is added export P2PRC as environment paths
```
@@ -190,4 +206,4 @@ The programming language used for this project was Golang. The reason Go lang wa
As we are working on the open source project p2prc (i.e p2p network designed for computation).If you are interested in participating as a contributor
or just providing feedback on new features to build or even just curious about new features added to the project do file an Issue or send an email to me@akilan.io.
[![Star History Chart](https://api.star-history.com/svg?repos=Akilan1999/p2p-rendering-computation&type=Date)](https://github.com/Gaurav-Gosain)
<!-- [![Star History Chart](https://api.star-history.com/svg?repos=Akilan1999/p2p-rendering-computation&type=Date)](https://github.com/Gaurav-Gosain) -->

View File

@@ -1,252 +0,0 @@
#+begin_quote
[!TIP] Haskell bindings supported!:
[[https://p2prc.akilan.io/Docs/haskell/P2PRC.html][Bindings
documentaton]]
#+end_quote
#+begin_quote
[!NOTE] Fixing documentation to latest changes. If you have any
questions setting up P2PRC either
[[https://github.com/Akilan1999/p2p-rendering-computation/issues/new/choose][create
an issue]] or send me an email (me AT akilan dot io). Currently HEAD is
always intended to stay on a working state. It is recommended to always
use HEAD in your go.mod file.
#+end_quote
#+begin_html
<h1 align="center">
#+end_html
#+begin_html
</h1>
#+end_html
#+begin_html
<!-- seperator -->
#+end_html
#+begin_html
<!-- The main aim of this project was to create a custom peer to peer network. The user acting as the
client has total flexibility on how to batch the tasks and the user acting as the server has complete
flexibility on tracking the container's usages and killing the containers at any point of time. -->
#+end_html
#+begin_html
<!-- The objective is to allow users to self host servers in easier
and abstracted manner. The main aim of this project was to create a custom peer to peer network for distributed computing. The user acting as the client has total flexibility on how to batch the tasks to any of nodes in networks. These nodes can anywhere from personal
computers behind NAT to custom hardware for running custom workload. The aim to provide
access to Heterogeneous set of nodes as a singular global list and abstract away the networking details giving the user focus on designing a custom orchestrator based
on the requirements of a user. -->
#+end_html
This project aims to simplify self-hosting servers and streamline the
creation of distributed systems. The primary focus is to enable users to
design custom peer-to-peer networks for distributed computing, offering
full flexibility and control while abstracting away the complexities of
networking.
** Key Features
:PROPERTIES:
:CUSTOM_ID: key-features
:END:
Simplified Self-Hosting Empower users to easily host nodes, whether on
personal computers behind NAT, custom hardware, or cloud-based
infrastructure.
*** Custom Peer-to-Peer Networks
:PROPERTIES:
:CUSTOM_ID: custom-peer-to-peer-networks
:END:
Build a decentralised network tailored to user requirements, enabling
distributed task execution without the need for in-depth networking
knowledge.
*** Heterogeneous Node Support
:PROPERTIES:
:CUSTOM_ID: heterogeneous-node-support
:END:
Harness a diverse array of nodes from personal computers to specialised
hardware---seamlessly integrated into a global node list.
*** Abstracted Networking Layer
:PROPERTIES:
:CUSTOM_ID: abstracted-networking-layer
:END:
Networking details are completely abstracted, enabling users to focus on
developing bespoke task orchestration systems. No more manual
configuration of IPs, ports, or connection logic.
*** Flexible Task Distribution
:PROPERTIES:
:CUSTOM_ID: flexible-task-distribution
:END:
Users acting as clients retain full control over how tasks are batched
and assigned to nodes, creating endless possibilities for optimising
performance based on specific use cases.
** Latest tutorial
:PROPERTIES:
:CUSTOM_ID: latest-tutorial
:END:
[[https://www.youtube.com/watch?v=OMwCpedu5cs%22][[[https://i.ytimg.com/vi/OMwCpedu5cs/hqdefault.jpg]]]]
#+begin_html
<!-- ## Table of contents in the current README -->
#+end_html
#+begin_html
<!-- 1. [Introduction](#Introduction)
2. [Installation](#extend-your-application-with-p2prc)
3. [Design Architecture](#Design-Architecture)
4. [Implementation](#Implementation)
5. [Find out more](#Find-out-more) -->
#+end_html
#+begin_html
<!-- # Table of contents in the Docs folder
1. [Introduction](Docs/Introduction.md)
2. [Installation](Docs/Installation.md)
3. [Abstractions](Docs/Abstractions.md)
3. [Design Architecture](DesignArchtectureIntro.md)
1. [Client Module](ClientArchitecture.md)
2. [P2P Module](P2PArchitecture.md)
3. [Server Module](ServerArchitecture.md)
4. [Implementation](Docs/Implementation.md)
1. [Client Module](Docs/ClientImplementation.md)
2. [P2P Module](Docs/P2PImplementation.md)
3. [Server Module](Docs/ServerImplementation.md)
4. [Config Module](Docs/ConfigImplementation.md)
5. [Cli Module](Docs/CliImplementation.md)
6. [Plugin Module](Docs/PluginImplementation.md)
7. [Language bindings](Docs/Bindings.md)
8. [Domain name mappings](Docs/Bindings.md)
5. Language bindings
1. [Haskell](Docs/haskell/)
5. [Problems](https://github.com/Akilan1999/p2p-rendering-computation/issues) -->
#+end_html
#+begin_html
<!--
## Introduction
This project aims to create a peer to peer (p2p) network, where a user can use the p2p network to act as a client (i.e sending tasks) or the server (i.e executing the tasks). A prototype application will be developed, which comes bundled with a p2p module and possible to execute docker containers or virtual environments across selected nodes.
### Objectives
- Background review on peer to peer network, virtual environments, decentralized rendering tools and tools to batch any sort of tasks.
- Creating p2p network
- Server to create a containerised environment
- The client node to run tasks on Server containerised node -->
#+end_html
#+begin_html
<!-- [Read more on the introduction](Docs/Introduction.md) -->
#+end_html
#+begin_html
<!-- <br> -->
#+end_html
** Extend your application with P2PRC
:PROPERTIES:
:CUSTOM_ID: extend-your-application-with-p2prc
:END:
#+begin_src go
package main
import (
"fmt"
"github.com/Akilan1999/p2p-rendering-computation/abstractions"
)
func main() {
_, err := abstractions.Init(nil)
if err != nil {
fmt.Println(err)
return
}
// start p2prc
_, err = abstractions.Start()
if err != nil {
fmt.Println(err)
return
}
// Run server till termination
for {
}
}
#+end_src
#+begin_html
<!-- ### Export once this is added export P2PRC as environment paths
```
export P2PRC=<PROJECT PATH>
export PATH=<PROJECT PATH>:${PATH}
```
[Read more](Docs/Abstractions.md) ...
## Installation from source
1. Ensure the Go compiler is installed
```
go version
```
3. Ensure docker is installed (Should run without sudo)
```
docker ps
```
3. Clone this repository
```
git clone https://github.com/Akilan1999/p2p-rendering-computation
```
4. Install and build the project
```
make install
```
- If you look closely you will get outputs such as:
```
// Add them to your .bashrc file
export P2PRC=/<path>/p2p-rendering-computation
export PATH=/<path>/p2p-rendering-computation:${PATH}
```
5. Test if it works
```
p2prc -h
```
or
```
./p2prc -h
```
[Read more on the installation and usage](Docs/Installation.md)
<br>
## Design Architecture
The design architecture was inspired and based on the linux kernel design. The project is segmented into various modules. Each module is responsible for certain tasks in the project. The modules are highly dependent on each other hence the entire codebase can be considered as a huge monolithic chuck which acts as its own library
[Read more on the Design Architecture](Docs/DesignArchtectureIntro.md)
<br>
## Implementation
The programming language used for this project was Golang. The reason Go lang was chosen was because it is a compiled language. The entire codebase is just a single binary file. When distributing to other linux distributing the only requirement would be the binary file to run the code. It is easy to write independant modules and be monolithic at the sametime using Go. Using Go.mod makes it very easy to handle external libraries and modularise code. The go.mod name for the project is git.sr.ht/~akilan1999/p2p-rendering-computation.
[Read more on the Implementation](Docs/Implementation.md)
<br> -->
#+end_html
** Find out more
:PROPERTIES:
:CUSTOM_ID: find-out-more
:END:
As we are working on the open source project p2prc (i.e p2p network
designed for computation).If you are interested in participating as a
contributor or just providing feedback on new features to build or even
just curious about new features added to the project do file an Issue or
send an email to me@akilan.io.
[[https://github.com/Gaurav-Gosain][[[https://api.star-history.com/svg?repos=Akilan1999/p2p-rendering-computation&type=Date]]]]

View File

@@ -52,8 +52,8 @@ func Start() (*gin.Engine, error) {
}
// MapPort Creates a reverse proxy connection and maps the appropriate port
func MapPort(port string, domainName string, serverAddress string) (entireAddress string, mapPort string, err error) {
entireAddress, mapPort, err = server.MapPort(port, domainName, serverAddress)
func MapPort(port string, domainName string, serverAddress string) (response *client.ResponseMAPPort, err error) {
response, err = client.MAPPort(port, domainName, serverAddress)
return
}

View File

@@ -3,21 +3,30 @@ package client
import (
"github.com/Akilan1999/p2p-rendering-computation/config"
"io/ioutil"
"net"
"net/http"
)
type ResponseMAPPort struct {
IPAddress string
IPAddress string
PortNo string
EntireAddress string
}
func MAPPort(port string, domainName string) (*ResponseMAPPort, error) {
func MAPPort(port string, domainName string, ServerAddress string) (*ResponseMAPPort, error) {
Config, err := config.ConfigInit(nil, nil)
if err != nil {
return nil, err
}
URL := "http://0.0.0.0:" + Config.ServerPort
if ServerAddress != "" {
URL = "http://" + ServerAddress
}
//if version == "version 6" {
URL := "http://0.0.0.0:" + Config.ServerPort + "/MAPPort?port=" + port + "&domain_name=" + domainName
URL = URL + "/MAPPort?port=" + port + "&domain_name=" + domainName
//} else {
// URL = "http://" + IP + ":" + serverPort + "/server_info"
//}
@@ -32,8 +41,15 @@ func MAPPort(port string, domainName string) (*ResponseMAPPort, error) {
return nil, err
}
host, Exposedport, err := net.SplitHostPort(string(byteValue))
if err != nil {
return nil, err
}
var response ResponseMAPPort
response.IPAddress = string(byteValue)
response.IPAddress = host
response.PortNo = Exposedport
response.EntireAddress = string(byteValue)
return &response, nil
}

View File

@@ -283,7 +283,7 @@ var CliAction = func(ctx *cli.Context) error {
}
if MAPPort != "" {
address, err := client.MAPPort(MAPPort, DomainName)
address, err := client.MAPPort(MAPPort, DomainName, RemoteAddress)
if err != nil {
return err
}

View File

@@ -30,6 +30,7 @@ var (
RemoveContainerGroup bool
RemoveGroup string
MAPPort string
RemoteAddress string
DomainName string
//FRPProxy bool
// Generate only allowed in dev release
@@ -43,7 +44,6 @@ var (
)
var AppConfigFlags = []cli.Flag{
// Deprecated to be implemented using GRPC
&cli.BoolFlag{
Name: "Server",
Aliases: []string{"s"},
@@ -213,6 +213,13 @@ var AppConfigFlags = []cli.Flag{
EnvVars: []string{"MAPPORT"},
Destination: &MAPPort,
},
&cli.StringFlag{
Name: "RemoteAddress",
Aliases: []string{"ra"},
Usage: "Parameter for Map port for a remote address",
EnvVars: []string{"REMOTEADDRESS"},
Destination: &RemoteAddress,
},
&cli.StringFlag{
Name: "DomainName",
Aliases: []string{"dn"},

11
go.mod
View File

@@ -11,7 +11,7 @@ require (
github.com/google/uuid v1.3.0
github.com/lithammer/shortuuid v3.0.0+incompatible
github.com/otiai10/copy v1.6.0
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5
github.com/shirou/gopsutil/v3 v3.22.10
github.com/urfave/cli/v2 v2.3.0
gitlab.com/NebulousLabs/go-upnp v0.0.0-20181011194642-3a71999ed0d3
@@ -31,7 +31,7 @@ require (
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/containerd/containerd v1.5.0-beta.1 // indirect
github.com/coreos/go-oidc v2.2.1+incompatible // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
github.com/docker/distribution v2.7.1+incompatible // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.4.0 // indirect
@@ -76,10 +76,9 @@ require (
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/russross/blackfriday/v2 v2.0.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sergi/go-diff v1.1.0 // indirect
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
github.com/sirupsen/logrus v1.7.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect
github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect
github.com/tjfoc/gmsm v1.4.1 // indirect
@@ -91,7 +90,7 @@ require (
gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
google.golang.org/appengine v1.6.7 // indirect

19
go.sum
View File

@@ -183,8 +183,9 @@ github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -548,8 +549,8 @@ github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E=
github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
github.com/pires/go-proxyproto v0.6.2 h1:KAZ7UteSOt6urjme6ZldyFm4wDe/z0ZUP0Yv0Dos0d8=
github.com/pires/go-proxyproto v0.6.2/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
@@ -611,8 +612,9 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
@@ -620,7 +622,6 @@ github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shirou/gopsutil/v3 v3.22.10 h1:4KMHdfBRYXGF9skjDWiL4RA2N+E8dRdodU/bOZpPoVg=
github.com/shirou/gopsutil/v3 v3.22.10/go.mod h1:QNza6r4YQoydyCfo6rH0blGfKahgibh4dQmV5xdFkQk=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
@@ -628,8 +629,9 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
@@ -917,8 +919,9 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=

View File

@@ -11,7 +11,7 @@ import (
)
// VERSION specifies the version of the platform
var VERSION = "2.0.0"
var VERSION = "3.0.0"
var mode string
// Varaibles if mode is client

View File

@@ -1,40 +0,0 @@
#+begin_html
<!-- Code generated by gomarkdoc. DO NOT EDIT -->
#+end_html
* p2p-rendering-computation
:PROPERTIES:
:CUSTOM_ID: p2p-rendering-computation
:END:
#+begin_src go
import "github.com/Akilan1999/p2p-rendering-computation"
#+end_src
** Index
:PROPERTIES:
:CUSTOM_ID: index
:END:
- [[#variables][Variables]]
** Variables
:PROPERTIES:
:CUSTOM_ID: variables
:END:
#+begin_src go
var List_servers, Ip_table bool
#+end_src
Varaibles if mode is client
#+begin_src go
var OS, Pull_location, Run_script string
#+end_src
VERSION specifies the version of the platform
#+begin_src go
var VERSION = "2.0.0"
#+end_src
Generated by [[https://github.com/princjef/gomarkdoc][gomarkdoc]]

View File

@@ -11,9 +11,7 @@ import (
"github.com/Akilan1999/p2p-rendering-computation/p2p/frp"
"github.com/Akilan1999/p2p-rendering-computation/server/docker"
"github.com/gin-gonic/gin"
"io"
"io/ioutil"
"net"
"net/http"
"os/user"
"strconv"
@@ -195,7 +193,7 @@ func Server() (*gin.Engine, error) {
r.GET("/MAPPort", func(c *gin.Context) {
Ports := c.DefaultQuery("port", "0")
DomainName := c.DefaultQuery("domain_name", "")
url, _, err := MapPort(Ports, DomainName, "")
url, _, err := MapPort(Ports, DomainName)
if err != nil {
c.String(http.StatusInternalServerError, fmt.Sprintf("error: %s", err))
}
@@ -298,7 +296,7 @@ func Server() (*gin.Engine, error) {
ProxyIpAddr.EscapeImplementation = "FRP"
if config.BareMetal {
_, SSHPort, err := MapPort("22", "", "")
_, SSHPort, err := MapPort("22", "")
if err != nil {
return nil, err
}
@@ -375,33 +373,33 @@ func Server() (*gin.Engine, error) {
return r, nil
}
func MapPort(port string, domainName string, serverAddress string) (string, string, error) {
func MapPort(port string, domainName string) (string, string, error) {
// if server address is provided to do call RESTAPI to remotely open port.
if serverAddress != "" {
requestURL := fmt.Sprintf("http://%v/MAPPort?port=%v&domain_name=%v", serverAddress, port, domainName)
req, err := http.NewRequest(http.MethodGet, requestURL, nil)
if err != nil {
return "", "", err
}
res, err := http.DefaultClient.Do(req)
if err != nil {
return "", "", err
}
resBody, err := io.ReadAll(res.Body)
if err != nil {
return "", "", err
}
_, Exposedport, err := net.SplitHostPort(string(resBody))
if err != nil {
return "", "", err
}
return string(resBody), Exposedport, nil
}
//if serverAddress != "" {
// requestURL := fmt.Sprintf("http://%v/MAPPort?port=%v&domain_name=%v", serverAddress, port, domainName)
// req, err := http.NewRequest(http.MethodGet, requestURL, nil)
// if err != nil {
// return "", "", err
// }
//
// res, err := http.DefaultClient.Do(req)
// if err != nil {
// return "", "", err
// }
//
// resBody, err := io.ReadAll(res.Body)
// if err != nil {
// return "", "", err
// }
//
// _, Exposedport, err := net.SplitHostPort(string(resBody))
// if err != nil {
// return "", "", err
// }
//
// return string(resBody), Exposedport, nil
//}
//Get Server port based on the config file
config, err := config.ConfigInit(nil, nil)