Documentation
¶
Index ¶
- Constants
- Variables
- func ConnWriteMessage(conn *websocket.Conn, message ...string) error
- func CreateBinaryPacket(parts ...any) ([]byte, error)
- func DisconnectBoth(intent string, ongoingFT *FTMeta, disconnectReason string) error
- func DisconnectClient(currConn *websocket.Conn, code uint8, senderMessage, recvMessage string)
- func DisconnectConn(conn *websocket.Conn, message string) error
- func FileTransferWs(c echo.Context) error
- func HandleReceiver(intent string, ongoingFT *FTMeta) error
- func HandleRegisterReceiver(incomingRecvName string, incomingCode uint8, incomingBuffer *bytes.Buffer, ...) (*FTMeta, *FTErrResp, error)
- func HandleSender(ongoingFT *FTMeta) error
- func ParseReceiverCode(incomingBuffer *bytes.Buffer) (uint8, string, error)
- type ClientHandshake
- type FTCode_Generator
- type FTErrResp
- type FTMeta
- type FTPacket
- type FileInfo
- type MDReceiver
Constants ¶
const ( // Register a sender InitialTypeRegisterSender = uint8(0x01) // Server responds back to sender with a unique code InitialTypeUniqueCode = uint8(0x02) // Register a receiver InitialTypeRegisterReceiver = uint8(0x03) // Server sends metadata of the transfer to the receiver InitialTypeTransferMetaData = uint8(0x04) // Server responds back to sender to begin transfer // Receiver responds with 1 or 0 // 1 to begin transfer. 0 to abort. InitialTypeBeginTransfer = uint8(0x05) // Transfer packet from sender to receiver. InitialTypeTransferPacket = uint8(0x06) // Volutanry disconnection InitialTypeCloseConn = uint8(0x08) InitialTypeRequestNextPkt = uint8(0x10) InitialTypeFinishTransfer = uint8(0x11) // Server responds with transfer metadata of the transfer to receiver InitialTypeReceiverMD = uint8(0x21) // Receiver requests next pkt from server which inturn requests from sender InitialTypeRequestNextPacket = uint8(0x22) // A single file has finished transferring InitialTypeSingleFileTransferFinish = uint8(0x23) // All files have finished transferring InitialTypeAllTransferFinish = uint8(0x24) // Client, sender or receiver, requests the server to abort the transfer. InitialTypeAbortTransfer = uint8(0x25) // Server messages client InitialTypeTextMessage = uint8(0x26) // Server notifies the client that the connection is going to be closed. InitialTypeCloseConnNotify = uint8(0x27) // Server responds back to sender with the transfer code InitialTypeTransferCode = uint8(0x28) // Receiver aborts the transfer InitialAbortTransfer = uint8(0x29) // Receiver invokes a transfer of file with given idx from the server. InitialTypeStartTransferWithId = uint8(0x30) // current version Version = byte(1) )
Different initial byte types different 1 -> Register a Sender 2 -> Server responds with unique_code 3 -> Register a Receiver 4 -> Server responds to Sender to begin transfer 5 -> Transfer packet from Sender to Receiver 6 -> TBD Something for if either client disconnects.
Variables ¶
var ( // UserMap *ClientsMap = NewClientsMap() // SubscribedUsersMap *ClientsMap = NewClientsMap() // ConnUpgrader = websocket.Upgrader{} // File transfer map of all ongoing transfers FTMap *utils.ClientsMap[FTMeta] = utils.NewClientsMap[FTMeta]() // File transfer unique code generator FTCodeGenerator = FTCode_Generator{ // contains filtered or unexported fields } FTUsersMap *utils.ClientsMap[FTMeta] = utils.NewClientsMap[FTMeta]() ConnUpgrader = websocket.Upgrader{} )
Functions ¶
func ConnWriteMessage ¶
Writes a string message to the conn with the InitialTypeTextMessage byte.
func CreateBinaryPacket ¶
Creates a binry packet with the given components. Byte order big endian
func DisconnectBoth ¶
Handles the disconnection for both sender and receiver. No need for individual disconnection for now. If sender -> If recv not connected: delete map and return err If recv connected: disconnnect recv through channel, delete map and return If Receiver -> Sender always connected: disconnect sender through channel, delete map and return Channel not working for some reason. Instead just updating the TransferStopped flag in the FTMeta and checking if it was when the other conn crashes. Other conn then deletes the obj from map and returns
func DisconnectClient ¶
Handle Client socket disconnection Graceful handling prevents error logs
func DisconnectConn ¶
Server sends closeConn byte Issue is, both the connections have an infinite loop going on Closing one conn doesnt stop the loop Unless I make changes to the structs themselves there will always will be errors
func FileTransferWs ¶
func FileTransferWs(c echo.Context) error
Since the 2 sockets are working concurrently Need to signal using a channel Work on it later
func HandleReceiver ¶
func HandleRegisterReceiver ¶
func HandleSender ¶
Types ¶
type ClientHandshake ¶
type ClientHandshake struct { Version uint8 // Send => 0, Receive => 1 Intent uint8 UniqueCode uint8 FileSize uint64 ClientName string Filename string }
Since handshake is a 1 time thing, it will be done through json
type FTCode_Generator ¶
type FTCode_Generator struct {
// contains filtered or unexported fields
}
func (*FTCode_Generator) NewCode ¶
func (idGen *FTCode_Generator) NewCode() uint8
Just increments the default value
type FTMeta ¶
type FTMeta struct { Code uint8 SenderName string ReceiverName string SenderConn *websocket.Conn ReceiverConn *websocket.Conn Filename string FileSize uint64 FileInfo *[]FileInfo Version uint8 SenderClosed bool ReceiverClosed bool TransferStopped bool // contains filtered or unexported fields }
Metadata for single file transfer transaction.
func HandleRegisterSender ¶
Handling disconnection at the top level Funcs just send a cust error
func (*FTMeta) DisconnectBoth ¶
type FTPacket ¶
Datasize uint16 -> max size would be 65kb Datasize uint32 -> max size would be 4.2gb
type MDReceiver ¶
Metadata for receiver from server