package nmos import ( "bytes" "context" "encoding/json" "fmt" "net/http" "strings" "time" ) type ConnectionClient struct { BaseURL string HTTPClient *http.Client } func NewConnectionClient(baseURL string) *ConnectionClient { return &ConnectionClient{ BaseURL: strings.TrimRight(baseURL, "/"), HTTPClient: &http.Client{ Timeout: 10 * time.Second, }, } } func (c *ConnectionClient) StageReceiver(ctx context.Context, receiverID string, reqBody StagedReceiverRequest) error { body, err := json.Marshal(reqBody) if err != nil { return err } url := fmt.Sprintf("%s/x-nmos/connection/v1.1/receivers/%s/staged", c.BaseURL, receiverID) req, err := http.NewRequestWithContext(ctx, http.MethodPatch, url, bytes.NewReader(body)) if err != nil { return err } req.Header.Set("Content-Type", "application/json") resp, err := c.HTTPClient.Do(req) if err != nil { return err } defer resp.Body.Close() if resp.StatusCode < 200 || resp.StatusCode >= 300 { return fmt.Errorf("NMOS IS-05 stage receiver returned %s", resp.Status) } return nil } func BuildRTPReceiverStagedRequest(senderID *string, sdp string) StagedReceiverRequest { transportFile := map[string]string{ "data": sdp, "type": "application/sdp", } return StagedReceiverRequest{ MasterEnable: true, Activation: Activation{ Mode: "activate_immediate", }, SenderID: senderID, TransportFile: transportFile, } }