fix IP configuration prefix output
[project/umbim.git] / cli.c
diff --git a/cli.c b/cli.c
index 86fe726..c43b4f3 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -152,7 +152,7 @@ mbim_subscriber_response(void *buffer, int len)
        if (le32toh(state->readyinfo) & MBIM_READY_INFO_FLAG_PROTECT_UNIQUE_ID)
                printf("  dont display subscriberID: 1\n");
        for (nr = 0; nr < le32toh(state->telephonenumberscount); nr++) {
-               struct mbim_string *str = buffer + le32toh(state->telephonenumbers) + (nr * sizeof(struct mbim_string));
+               struct mbim_string *str = (void *)&state->telephonenumbers + (nr * sizeof(struct mbim_string));
                char *number = mbim_get_string(str, buffer);
                printf("  number: %s\n", number);
        }
@@ -177,8 +177,8 @@ mbim_attach_response(void *buffer, int len)
                mbim_enum_string(mbim_nw_error_values, le32toh(ps->nwerror)));
        printf("  packetservicestate: %04X - %s\n", le32toh(ps->packetservicestate),
                mbim_enum_string(mbim_packet_service_state_values, le32toh(ps->packetservicestate)));
-       printf("  uplinkspeed: %"PRIu64"\n", le64toh(ps->uplinkspeed));
-       printf("  downlinkspeed: %"PRIu64"\n", le64toh(ps->downlinkspeed));
+       printf("  uplinkspeed: %"PRIu64"\n", (uint64_t) le64toh(ps->uplinkspeed));
+       printf("  downlinkspeed: %"PRIu64"\n", (uint64_t) le64toh(ps->downlinkspeed));
 
        if (MBIM_PACKET_SERVICE_STATE_ATTACHED == le32toh(ps->packetservicestate))
                return 0;
@@ -218,6 +218,7 @@ mbim_config_response(void *buffer, int len)
        struct mbim_basic_connect_ip_configuration_r *ip = (struct mbim_basic_connect_ip_configuration_r *) buffer;
        char ipv4[16];
        int i;
+       uint32_t offset;
 
        if (len < sizeof(struct mbim_basic_connect_ip_configuration_r)) {
                fprintf(stderr, "message not long enough\n");
@@ -226,8 +227,9 @@ mbim_config_response(void *buffer, int len)
 
        if (le32toh(ip->ipv4configurationavailable) & MBIM_IP_CONFIGURATION_AVAILABLE_FLAG_ADDRESS)
                for (i = 0; i < le32toh(ip->ipv4addresscount); i++) {
-                       mbim_get_ipv4(buffer, ipv4, ip->ipv4address + (i * 4));
-                       printf("  ipv4address: %s\n", ipv4);
+                       offset = le32toh(ip->ipv4address) + (i * 4);
+                       mbim_get_ipv4(buffer, ipv4, 4 + offset);
+                       printf("  ipv4address: %s/%d\n", ipv4, mbim_get_int(buffer, offset));
                }
        if (le32toh(ip->ipv4configurationavailable) & MBIM_IP_CONFIGURATION_AVAILABLE_FLAG_DNS) {
                mbim_get_ipv4(buffer, ipv4, ip->ipv4gateway);
@@ -316,7 +318,19 @@ mbim_connect_request(void)
        memcpy(c->contexttype, uuid_context_type_internet, 16);
        if (_argc > 0)
                mbim_encode_string(&c->accessstring, *_argv);
-
+       if (_argc > 3) {
+               if (!strcmp(_argv[1], "pap"))
+                       c->authprotocol = htole32(MBIM_AUTH_PROTOCOL_PAP);
+               else if (!strcmp(_argv[1], "chap"))
+                       c->authprotocol = htole32(MBIM_AUTH_PROTOCOL_CHAP);
+               else if (!strcmp(_argv[1], "mschapv2"))
+                       c->authprotocol = htole32(MBIM_AUTH_PROTOCOL_MSCHAPV2);
+
+               if (c->authprotocol) {
+                       mbim_encode_string(&c->username, _argv[2]);
+                       mbim_encode_string(&c->password, _argv[3]);
+               }
+       }
        return mbim_send_command_msg();
 }