@@ -2738,6 +2738,354 @@ SARA_R5_error_t SARA_R5::socketDirectLinkCongestionTimer(int socket, unsigned lo
2738
2738
return err;
2739
2739
}
2740
2740
2741
+ SARA_R5_error_t SARA_R5::querySocketType (int socket, SARA_R5_socket_protocol_t *protocol)
2742
+ {
2743
+ char *command;
2744
+ char *response;
2745
+ SARA_R5_error_t err;
2746
+ int scanNum;
2747
+ int socketStore = 0 ;
2748
+ int paramVal;
2749
+
2750
+ command = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2751
+ if (command == NULL )
2752
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2753
+ sprintf (command, " %s=%d,0" , SARA_R5_SOCKET_CONTROL, socket);
2754
+
2755
+ response = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2756
+ if (response == NULL )
2757
+ {
2758
+ free (command);
2759
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2760
+ }
2761
+
2762
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
2763
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2764
+
2765
+ if (err == SARA_R5_ERROR_SUCCESS)
2766
+ {
2767
+ scanNum = sscanf (response, " +USOCTL: %d,0,%d" ,
2768
+ &socketStore, ¶mVal);
2769
+ if (scanNum != 2 )
2770
+ {
2771
+ if (_printDebug == true )
2772
+ {
2773
+ _debugPort->print (F (" querySocketType: error: scanNum is " ));
2774
+ _debugPort->println (scanNum);
2775
+ }
2776
+ free (command);
2777
+ free (response);
2778
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2779
+ }
2780
+
2781
+ *protocol = (SARA_R5_socket_protocol_t)paramVal;
2782
+ }
2783
+
2784
+ free (command);
2785
+ free (response);
2786
+
2787
+ return err;
2788
+ }
2789
+
2790
+ SARA_R5_error_t SARA_R5::querySocketLastError (int socket, int *error)
2791
+ {
2792
+ char *command;
2793
+ char *response;
2794
+ SARA_R5_error_t err;
2795
+ int scanNum;
2796
+ int socketStore = 0 ;
2797
+ int paramVal;
2798
+
2799
+ command = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2800
+ if (command == NULL )
2801
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2802
+ sprintf (command, " %s=%d,1" , SARA_R5_SOCKET_CONTROL, socket);
2803
+
2804
+ response = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2805
+ if (response == NULL )
2806
+ {
2807
+ free (command);
2808
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2809
+ }
2810
+
2811
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
2812
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2813
+
2814
+ if (err == SARA_R5_ERROR_SUCCESS)
2815
+ {
2816
+ scanNum = sscanf (response, " +USOCTL: %d,1,%d" ,
2817
+ &socketStore, ¶mVal);
2818
+ if (scanNum != 2 )
2819
+ {
2820
+ if (_printDebug == true )
2821
+ {
2822
+ _debugPort->print (F (" querySocketLastError: error: scanNum is " ));
2823
+ _debugPort->println (scanNum);
2824
+ }
2825
+ free (command);
2826
+ free (response);
2827
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2828
+ }
2829
+
2830
+ *error = paramVal;
2831
+ }
2832
+
2833
+ free (command);
2834
+ free (response);
2835
+
2836
+ return err;
2837
+ }
2838
+
2839
+ SARA_R5_error_t SARA_R5::querySocketTotalBytesSent (int socket, uint32_t *total)
2840
+ {
2841
+ char *command;
2842
+ char *response;
2843
+ SARA_R5_error_t err;
2844
+ int scanNum;
2845
+ int socketStore = 0 ;
2846
+ long unsigned int paramVal;
2847
+
2848
+ command = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2849
+ if (command == NULL )
2850
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2851
+ sprintf (command, " %s=%d,2" , SARA_R5_SOCKET_CONTROL, socket);
2852
+
2853
+ response = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2854
+ if (response == NULL )
2855
+ {
2856
+ free (command);
2857
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2858
+ }
2859
+
2860
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
2861
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2862
+
2863
+ if (err == SARA_R5_ERROR_SUCCESS)
2864
+ {
2865
+ scanNum = sscanf (response, " +USOCTL: %d,2,%lu" ,
2866
+ &socketStore, ¶mVal);
2867
+ if (scanNum != 2 )
2868
+ {
2869
+ if (_printDebug == true )
2870
+ {
2871
+ _debugPort->print (F (" querySocketTotalBytesSent: error: scanNum is " ));
2872
+ _debugPort->println (scanNum);
2873
+ }
2874
+ free (command);
2875
+ free (response);
2876
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2877
+ }
2878
+
2879
+ *total = (uint32_t )paramVal;
2880
+ }
2881
+
2882
+ free (command);
2883
+ free (response);
2884
+
2885
+ return err;
2886
+ }
2887
+
2888
+ SARA_R5_error_t SARA_R5::querySocketTotalBytesReceived (int socket, uint32_t *total)
2889
+ {
2890
+ char *command;
2891
+ char *response;
2892
+ SARA_R5_error_t err;
2893
+ int scanNum;
2894
+ int socketStore = 0 ;
2895
+ long unsigned int paramVal;
2896
+
2897
+ command = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2898
+ if (command == NULL )
2899
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2900
+ sprintf (command, " %s=%d,3" , SARA_R5_SOCKET_CONTROL, socket);
2901
+
2902
+ response = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2903
+ if (response == NULL )
2904
+ {
2905
+ free (command);
2906
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2907
+ }
2908
+
2909
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
2910
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2911
+
2912
+ if (err == SARA_R5_ERROR_SUCCESS)
2913
+ {
2914
+ scanNum = sscanf (response, " +USOCTL: %d,3,%lu" ,
2915
+ &socketStore, ¶mVal);
2916
+ if (scanNum != 2 )
2917
+ {
2918
+ if (_printDebug == true )
2919
+ {
2920
+ _debugPort->print (F (" querySocketTotalBytesReceived: error: scanNum is " ));
2921
+ _debugPort->println (scanNum);
2922
+ }
2923
+ free (command);
2924
+ free (response);
2925
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2926
+ }
2927
+
2928
+ *total = (uint32_t )paramVal;
2929
+ }
2930
+
2931
+ free (command);
2932
+ free (response);
2933
+
2934
+ return err;
2935
+ }
2936
+
2937
+ SARA_R5_error_t SARA_R5::querySocketRemoteIPAddress (int socket, IPAddress *address, int *port)
2938
+ {
2939
+ char *command;
2940
+ char *response;
2941
+ SARA_R5_error_t err;
2942
+ int scanNum;
2943
+ int socketStore = 0 ;
2944
+ int paramVals[5 ];
2945
+
2946
+ command = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2947
+ if (command == NULL )
2948
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2949
+ sprintf (command, " %s=%d,4" , SARA_R5_SOCKET_CONTROL, socket);
2950
+
2951
+ response = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
2952
+ if (response == NULL )
2953
+ {
2954
+ free (command);
2955
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2956
+ }
2957
+
2958
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
2959
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2960
+
2961
+ if (err == SARA_R5_ERROR_SUCCESS)
2962
+ {
2963
+ scanNum = sscanf (response, " +USOCTL: %d,4,\" %d.%d.%d.%d\" ,%d" ,
2964
+ &socketStore,
2965
+ ¶mVals[0 ], ¶mVals[1 ], ¶mVals[2 ], ¶mVals[3 ],
2966
+ ¶mVals[4 ]);
2967
+ if (scanNum != 6 )
2968
+ {
2969
+ if (_printDebug == true )
2970
+ {
2971
+ _debugPort->print (F (" querySocketRemoteIPAddress: error: scanNum is " ));
2972
+ _debugPort->println (scanNum);
2973
+ }
2974
+ free (command);
2975
+ free (response);
2976
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2977
+ }
2978
+
2979
+ IPAddress tempAddress = { (uint8_t )paramVals[0 ], (uint8_t )paramVals[1 ],
2980
+ (uint8_t )paramVals[2 ], (uint8_t )paramVals[3 ] };
2981
+ *address = tempAddress;
2982
+ *port = paramVals[4 ];
2983
+ }
2984
+
2985
+ free (command);
2986
+ free (response);
2987
+
2988
+ return err;
2989
+ }
2990
+
2991
+ SARA_R5_error_t SARA_R5::querySocketStatusTCP (int socket, SARA_R5_tcp_socket_status_t *status)
2992
+ {
2993
+ char *command;
2994
+ char *response;
2995
+ SARA_R5_error_t err;
2996
+ int scanNum;
2997
+ int socketStore = 0 ;
2998
+ int paramVal;
2999
+
3000
+ command = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
3001
+ if (command == NULL )
3002
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
3003
+ sprintf (command, " %s=%d,10" , SARA_R5_SOCKET_CONTROL, socket);
3004
+
3005
+ response = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
3006
+ if (response == NULL )
3007
+ {
3008
+ free (command);
3009
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
3010
+ }
3011
+
3012
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
3013
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
3014
+
3015
+ if (err == SARA_R5_ERROR_SUCCESS)
3016
+ {
3017
+ scanNum = sscanf (response, " +USOCTL: %d,10,%d" ,
3018
+ &socketStore, ¶mVal);
3019
+ if (scanNum != 2 )
3020
+ {
3021
+ if (_printDebug == true )
3022
+ {
3023
+ _debugPort->print (F (" querySocketStatusTCP: error: scanNum is " ));
3024
+ _debugPort->println (scanNum);
3025
+ }
3026
+ free (command);
3027
+ free (response);
3028
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
3029
+ }
3030
+
3031
+ *status = (SARA_R5_tcp_socket_status_t)paramVal;
3032
+ }
3033
+
3034
+ free (command);
3035
+ free (response);
3036
+
3037
+ return err;
3038
+ }
3039
+
3040
+ SARA_R5_error_t SARA_R5::querySocketOutUnackData (int socket, uint32_t *total)
3041
+ {
3042
+ char *command;
3043
+ char *response;
3044
+ SARA_R5_error_t err;
3045
+ int scanNum;
3046
+ int socketStore = 0 ;
3047
+ long unsigned int paramVal;
3048
+
3049
+ command = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
3050
+ if (command == NULL )
3051
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
3052
+ sprintf (command, " %s=%d,11" , SARA_R5_SOCKET_CONTROL, socket);
3053
+
3054
+ response = sara_r5_calloc_char (strlen (SARA_R5_SOCKET_CONTROL) + 16 );
3055
+ if (response == NULL )
3056
+ {
3057
+ free (command);
3058
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
3059
+ }
3060
+
3061
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
3062
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
3063
+
3064
+ if (err == SARA_R5_ERROR_SUCCESS)
3065
+ {
3066
+ scanNum = sscanf (response, " +USOCTL: %d,11,%lu" ,
3067
+ &socketStore, ¶mVal);
3068
+ if (scanNum != 2 )
3069
+ {
3070
+ if (_printDebug == true )
3071
+ {
3072
+ _debugPort->print (F (" querySocketOutUnackData: error: scanNum is " ));
3073
+ _debugPort->println (scanNum);
3074
+ }
3075
+ free (command);
3076
+ free (response);
3077
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
3078
+ }
3079
+
3080
+ *total = (uint32_t )paramVal;
3081
+ }
3082
+
3083
+ free (command);
3084
+ free (response);
3085
+
3086
+ return err;
3087
+ }
3088
+
2741
3089
// Issues command to get last socket error, then prints to serial. Also updates rx/backlog buffers.
2742
3090
int SARA_R5::socketGetLastError ()
2743
3091
{
0 commit comments