syntax = "proto3";
package felinet;

service Handler {
    rpc Login(LoginRequest) returns (LoginResponse);
    rpc PushPackets(stream PacketIn) returns (PushPacketResponse);
    rpc GetPackets(PacketFilter) returns (stream PacketOut);
    rpc Ping(PingRequest) returns (PingResponse);
}

message LoginRequest {
    string username = 1;
    string password = 2;
}

message LoginResponse {
    bool success = 1;
    uint32 error = 2;
    string msg = 3;
    bytes uuid = 4;
}

message PushPacketResponse {}

message PacketIn {
    bytes raw = 1;
    bytes uuid = 2;
}

message PacketOut {
	bytes raw = 1;
}

message PacketFilter {
    oneof filter {
        uint32 all = 1;
        DistanceFilter dist = 2;
        CallsignFilter dest = 3;
        uint32 heard_seconds = 4;
    }
    bytes uuid = 10;
}

message DistanceFilter {
    float latitude = 1;
    float longitude = 2;
    float distance = 3;
}

message CallsignFilter {
    string callsign = 1;
    uint32 ssid = 2;
}

message PingRequest {
    bytes uuid = 1;
}

message PingResponse {}