mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 16:14:02 +03:00
Add client abridged protocol
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package rpc
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
|
||||
"github.com/9seconds/mtg/conntypes"
|
||||
)
|
||||
|
||||
type ProxyResponseType uint8
|
||||
|
||||
const (
|
||||
ProxyResponseTypeAns ProxyResponseType = iota
|
||||
ProxyResponseTypeSimpleAck
|
||||
ProxyResponseTypeCloseExt
|
||||
)
|
||||
|
||||
type ProxyResponse struct {
|
||||
Type ProxyResponseType
|
||||
ConnID conntypes.ConnID
|
||||
Payload conntypes.Packet
|
||||
}
|
||||
|
||||
func ParseProxyResponse(packet conntypes.Packet) (*ProxyResponse, error) {
|
||||
var response ProxyResponse
|
||||
|
||||
if len(packet) < 4 {
|
||||
return nil, fmt.Errorf("incorrect packet length: %d", len(packet))
|
||||
}
|
||||
|
||||
tag := packet[:4]
|
||||
switch {
|
||||
case bytes.Equal(tag, TagProxyAns):
|
||||
response.Type = ProxyResponseTypeAns
|
||||
copy(response.ConnID[:], packet[8:16])
|
||||
response.Payload = packet[16:]
|
||||
return &response, nil
|
||||
|
||||
case bytes.Equal(tag, TagSimpleAck):
|
||||
response.Type = ProxyResponseTypeSimpleAck
|
||||
copy(response.ConnID[:], packet[4:12])
|
||||
response.Payload = packet[12:]
|
||||
return &response, nil
|
||||
|
||||
case bytes.Equal(tag, TagCloseExt):
|
||||
response.Type = ProxyResponseTypeCloseExt
|
||||
return &response, nil
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("unknown response type %x", tag)
|
||||
}
|
||||
Reference in New Issue
Block a user