// Copyright (c) 2018 Open Networking Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

option go_package = "github.com/opencord/voltha-protos/v5/go/voip_user_profile";
option java_package = "org.opencord.voltha.voip_user_profile";

package voip_user_profile;
import "google/api/annotations.proto";

// A user specific profile for voip service
message VoipUserProfileRequest {
  // for the path in KV store
  string key = 1;
  VoipUserProfile voipUserProfile = 2;
}

message VoipUserProfile {
  string voipSystemProfileKey = 1;
  string username = 2;
  string password = 3;
  string domain = 4;
  string proxy = 5;
  uint32 port = 6;
  string sipDisplayName = 7;
  string realm = 8;
}