X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=gsm.cpp;h=ee46ff6503da426aaf701c17978dfd49e9f1a1cd;hp=31a796773195be68d352f20c3be562fd6a52e40c;hb=0ab74c122c8965a916fc395c0f72d4599aeb3f9f;hpb=cbc7e7fdf73ec34e1d060a8d93235b031ccbe602 diff --git a/gsm.cpp b/gsm.cpp index 31a7967..ee46ff6 100644 --- a/gsm.cpp +++ b/gsm.cpp @@ -1109,6 +1109,7 @@ static int mncc_fd_read(struct lcr_fd *lfd, void *inst, int idx) int rc; static char buf[sizeof(struct gsm_mncc)+1024]; struct gsm_mncc *mncc_prim = (struct gsm_mncc *) buf; + struct gsm_mncc_hello *hello = (struct gsm_mncc_hello *) buf; memset(buf, 0, sizeof(buf)); rc = recv(lfd->fd, buf, sizeof(buf), 0); @@ -1117,6 +1118,17 @@ static int mncc_fd_read(struct lcr_fd *lfd, void *inst, int idx) if (rc < 0) return rc; + /* TODO: size check? */ + switch (mncc_prim->msg_type) { + case MNCC_SOCKET_HELLO: + if (hello->version != MNCC_SOCK_VERSION) { + PERROR("MNCC version different. BSC version is %u\n", hello->version); + mncc_fd_close(lcr_gsm, lfd); + return 0; + } + break; + } + /* Hand the MNCC message into LCR */ switch (lcr_gsm->type) { #ifdef WITH_GSM_BS