refactor: update Listen method to accept metadata as a pointer

MyungSub0519 committed Nov 12, 2025 at 23:09 UTC ca0328808f1243feb99e85ac44ef91ed49ee3c3f
4 files changed +8 -13
cmd/demo-app/main.go
+1 -1
@@ -188,7 +188,7 @@ func runPaint() error {
188 defer client.Close()
189
190 // 3) Register lease and obtain a net.Listener that accepts relayed connections
191 - metadata := sdk.Metadata{
191 + metadata := &sdk.Metadata{
192 Description: "Portal demo paint app",
193 Tags: []string{"demo", "paint"},
194 Owner: "PortalApp Developer",
cmd/portal-tunnel/main.go
+1 -1
@@ -91,7 +91,7 @@ func runExpose() error {
91 defer client.Close()
92
93 // Register listener
94 - listener, err := client.Listen(cred, flagName, []string{"http/1.1", "h2"})
94 + listener, err := client.Listen(cred, flagName, []string{"http/1.1", "h2"}, nil)
95 if err != nil {
96 return fmt.Errorf("failed to register service: %w", err)
97 }
sdk/sdk.go
+4 -9
@@ -316,12 +316,12 @@ func (g *RDClient) Dial(cred *cryptoops.Credential, leaseID string, alpn string)
316 return nil, ErrNoAvailableRelay
317 }
318
319 -func (g *RDClient) Listen(cred *cryptoops.Credential, name string, alpns []string, metadata ...Metadata) (*RDListener, error) {
319 +func (g *RDClient) Listen(cred *cryptoops.Credential, name string, alpns []string, metadata *Metadata) (*RDListener, error) {
320 log.Debug().
321 Str("lease_id", cred.ID()).
322 Str("name", name).
323 Strs("alpns", alpns).
324 - Int("metadata_count", len(metadata)).
324 + Bool("has_metadata", metadata != nil).
325 Msg("[SDK] Creating listener")
326
327 // Validate name is URL-safe
@@ -332,15 +332,10 @@ func (g *RDClient) Listen(cred *cryptoops.Credential, name string, alpns []strin
332 return nil, ErrInvalidName
333 }
334
335 - if len(metadata) > 1 {
336 - log.Error().Msg("[SDK] Too many metadata arguments")
337 - return nil, ErrInvalidMetadata
338 - }
339 -
335 metadataValue := ""
336
342 - if len(metadata) > 0 {
343 - metadataJSON, err := json.Marshal(metadata[0])
337 + if metadata != nil {
338 + metadataJSON, err := json.Marshal(metadata)
339 if err != nil {
340 log.Error().Err(err).Msg("[SDK] Failed to marshal metadata")
341 return nil, ErrInvalidMetadata
sdk/sdk_e2e_test.go
+2 -2
@@ -102,7 +102,7 @@ func TestE2E_ClientToAppThroughRelay(t *testing.T) {
102
103 // 5. Register listener on app side
104 log.Info().Msg("[TEST] Step 5: Registering app listener")
105 - appListener, err := appClient.Listen(appCred, "test-app", []string{"http/1.1"})
105 + appListener, err := appClient.Listen(appCred, "test-app", []string{"http/1.1"}, nil)
106 if err != nil {
107 t.Fatalf("Failed to create app listener: %v", err)
108 }
@@ -276,7 +276,7 @@ func TestE2E_MultipleConnections(t *testing.T) {
276 }
277 defer appClient.Close()
278
279 - appListener, err := appClient.Listen(appCred, "multi-test-app", []string{"http/1.1"})
279 + appListener, err := appClient.Listen(appCred, "multi-test-app", []string{"http/1.1"}, nil)
280 if err != nil {
281 t.Fatalf("Failed to create app listener: %v", err)
282 }