diff options
Diffstat (limited to 'src/options.cpp')
| -rw-r--r-- | src/options.cpp | 42 | 
1 files changed, 28 insertions, 14 deletions
| diff --git a/src/options.cpp b/src/options.cpp index f7bbdc4..bda0c01 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -48,7 +48,12 @@ xs::options_t::options_t () :      sndtimeo (-1),      ipv4only (1),      keepalive (0), -    protocol (0), +    legacy_protocol (false), +    sp_service (0), +    sp_pattern (-1), +    sp_version (-1), +    sp_role (-1), +    sp_complement (-1),      filter (XS_FILTER_PREFIX),      survey_timeout (-1),      delay_on_close (true), @@ -236,29 +241,29 @@ int xs::options_t::setsockopt (int option_, const void *optval_,              return 0;          } -    case XS_PROTOCOL: +    case XS_FILTER: +        if (optvallen_ != sizeof (int)) { +            errno = EINVAL; +            return -1; +        } +        filter = *((int*) optval_); +        return 0; + +    case XS_SERVICE_ID:          {              if (optvallen_ != sizeof (int)) {                  errno = EINVAL;                  return -1;              }              int val = *((int*) optval_); -            if (val < 0) { +            if (val < 0 || val > 0xffff) {                  errno = EINVAL;                  return -1;              } -            protocol = val; +            sp_service = val;              return 0;          } -    case XS_FILTER: -        if (optvallen_ != sizeof (int)) { -            errno = EINVAL; -            return -1; -        } -        filter = *((int*) optval_); -        return 0; -      case XS_SURVEY_TIMEOUT:          if (type != XS_SURVEYOR) {              errno = ENOTSUP; @@ -452,12 +457,21 @@ int xs::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_)          *optvallen_ = sizeof (int);          return 0; -    case XS_PROTOCOL: +    case XS_PATTERN_VERSION: +        if (*optvallen_ < sizeof (int)) { +            errno = EINVAL; +            return -1; +        } +        *((int*) optval_) = sp_version; +        *optvallen_ = sizeof (int); +        return 0; + +    case XS_SERVICE_ID:          if (*optvallen_ < sizeof (int)) {              errno = EINVAL;              return -1;          } -        *((int*) optval_) = protocol; +        *((int*) optval_) = sp_service;          *optvallen_ = sizeof (int);          return 0; | 
