syntax = "proto3";
package felinet;

service Handler {
    rpc Login(LoginRequest) returns (LoginResponse);
    rpc PushPackets(stream PacketIn) returns (PushPacketResponse);
    rpc GetPackets(PacketRequest) 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 PacketIn {
    bytes raw = 1;
    bytes uuid = 2;
}

message PushPacketResponse {}

message PacketRequest {
    repeated PacketFilter filters = 1;
    bytes uuid = 2;
}

message PacketOut {
    bytes raw = 1;
}

message PingRequest {
    bytes uuid = 1;
}

message PingResponse {}

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

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

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