Emulating Carbon-copy of NDS-sniffed packets
[gnokii.git] / common / newmodules / n6110.c
index 12d572a..3fdd16a 100644 (file)
    supported by this model of phone. */
 
 
-
-
-
-
-
 /* Here we initialise model specific functions. */
 GSM_Functions N6110_Functions = {
   N6110_Initialise,
@@ -136,12 +131,11 @@ GSM_Functions N6110_Functions = {
 #ifndef UCLINUX
   N6110_GetProfile,
   N6110_SetProfile,
-  N6110_SendRLPFrame,
 #else /* UCLINUX */
   NULL,
   NULL,
-  NULL,
 #endif /* UCLINUX */
+  N6110_SendRLPFrame,
   N6110_CancelCall,
 #ifndef UCLINUX
   N6110_PressKey,
@@ -437,6 +431,8 @@ GSM_Error N6110_SendStatusRequest(void)
 
 static void N6110_ReplyGetAuthentication(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) {
 
+  LIVE;
+
 #if defined WIN32 || !defined HAVE_SNPRINTF
   sprintf(Current_IMEI, "%s", MessageBuffer+9);
   sprintf(Current_Model, "%s", MessageBuffer+25);
@@ -600,6 +596,14 @@ static GSM_Error N6110_Authentication()
   
   0x00, 0x00, 0x00, 0x00};
 
+  unsigned char req3_55[]  = { N6110_FRAME_HEADER, 0x42,0x05,0x01,
+                              0x07,0xa2,0x88,0x81,0x21,0x55,0x63,0xa8,0x00,0x00,
+                              0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 };
+  unsigned char req3[]     = { N6110_FRAME_HEADER, 0x42,0x05,0x01,
+                              0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00,
+                              0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 };
+  unsigned char unknown_05[] = {N6110_FRAME_HEADER, 0x05};
+
 #ifdef DEBUG
   fprintf(stdout,_("Making authentication!\n"));
 #endif
@@ -608,15 +612,23 @@ static GSM_Error N6110_Authentication()
   usleep(100); Protocol->SendMessage(5, 0x02, connect2);
   usleep(100); Protocol->SendMessage(7, 0x02, connect3);
       
+  usleep(100); Protocol->SendMessage(sizeof(req3_55), 0x01, req3_55);  /* Lace */
+
   CurrentMagicError = GE_BUSY;
 
   usleep(100); Protocol->SendMessage(4, 0x64, connect4);
+
+  usleep(100); Protocol->SendMessage(sizeof(req3_55), 0x01, req3_55);  /* Lace */
+  usleep(100); Protocol->SendMessage(sizeof(req3), 0x01, req3);        /* Lace */
+
   if (NULL_WaitUntil(50,&CurrentMagicError)!=GE_NONE) return GE_TIMEOUT;
 
   N6110_GetNokiaAuth(Current_IMEI, MagicBytes, magic_connect+4);
 
   Protocol->SendMessage(45, 0x64, magic_connect);
 
+  usleep(100); Protocol->SendMessage(4, 0x04, unknown_05); /* Lace */
+
 #ifdef DEBUG
   fprintf(stdout,_("End of authentication!\n"));
 #endif
@@ -727,7 +739,12 @@ GSM_Error N6110_Initialise(char *port_device, char *initlength,
          After making it phone display "Accessory connected"
          and probably give access to some function (I'm not too sure about it !)
          Anyway, I make it now for N51xx/61xx */
-      if (GetModelFeature (FN_AUTHENTICATION)!=0) {
+#if 1
+      if (GetModelFeature (FN_AUTHENTICATION)!=0)
+#else
+      if (0/*Lace-hack:GetModelFeature (FN_AUTHENTICATION)!=0*/)
+#endif
+       {
         if (N6110_Authentication()!=GE_NONE) return GE_TIMEOUT;
       } else {        /* No authentication */
         if (N6110_SendIMEIFrame()!=GE_NONE) return GE_TIMEOUT;    
@@ -1898,6 +1915,8 @@ GSM_Error N6110_SetProfile(GSM_Profile *Profile)
   return (GE_NONE);
 }
 
+#endif /* UCLINUX */
+
 bool N6110_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx)
 {
   u8 req[60] = { 0x00, 0xd9 };
@@ -1913,6 +1932,8 @@ bool N6110_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx)
   return (Protocol->SendFrame(32, 0xf0, req));
 }
 
+#ifndef UCLINUX
+
 void N6110_ReplyGetCalendarNote(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) {
 
   int i, j;
@@ -2577,12 +2598,16 @@ GSM_Error N6110_DialData(char *Number, char type, void (* callpassup)(char c))
 
        switch (type) {
        case 0:
+               usleep(100); Protocol->SendMessage(sizeof(req3), 0x01, req3);   /* Lace */
+               usleep(100);
                req_end = req_end0;
                size = sizeof(req_end0);
                break;
        case 1:
                Protocol->SendMessage(sizeof(req3), 0x01, req3);
+               usleep(1000000);
                Protocol->SendMessage(sizeof(req4), 0x01, req4);
+               usleep(1000000);
                req_end = req_end1;
                size = sizeof(req_end1);
                break;
@@ -2603,7 +2628,11 @@ GSM_Error N6110_DialData(char *Number, char type, void (* callpassup)(char c))
        memcpy(req + 5 + strlen(Number), req_end, size);
 
        Protocol->SendMessage(5 + size + strlen(Number), 0x01, req);
+       usleep(1000000);
+
+#if 0
        if (type != 1) Protocol->SendMessage(26, 0x01, req2);
+#endif
 
        return (GE_NONE);
 }
@@ -5232,8 +5261,6 @@ static void N6110_Dispatch0x06Message(u16 MessageLength, u8 *MessageBuffer, u8 M
   }
 }
 
-#endif /* UCLINUX */
-
 static void N6110_Dispatch0x09Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) {
     
   switch (MessageBuffer[3]) {
@@ -5259,8 +5286,6 @@ static void N6110_Dispatch0x09Message(u16 MessageLength, u8 *MessageBuffer, u8 M
   }
 }
 
-#ifndef UCLINUX
-
 static void N6110_Dispatch0x13Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) {
 
   switch(MessageBuffer[3]) {
@@ -5646,7 +5671,6 @@ void N6110_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType)
       default  :N6110_ReplyEnterSecurityCode    (MessageLength,MessageBuffer,MessageType);break;
     }
     break;
-#endif /* UCLINUX */
 
   /* SIM login */
   case 0x09:
@@ -5654,7 +5678,6 @@ void N6110_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType)
     N6110_Dispatch0x09Message(MessageLength, MessageBuffer, MessageType);
     break;
 
-#ifndef UCLINUX
   /* Network info */
   case 0x0a:
     switch (MessageBuffer[3]) {