Added MCC parsing in system info extractor, fixed MNC parsing for 2-digit MNC's
diff --git a/include/grgsm/misc_utils/extract_system_info.h b/include/grgsm/misc_utils/extract_system_info.h
index 8be10a1..72d87bf 100644
--- a/include/grgsm/misc_utils/extract_system_info.h
+++ b/include/grgsm/misc_utils/extract_system_info.h
@@ -54,6 +54,7 @@
       virtual std::vector<int> get_pwrs() = 0;
       virtual std::vector<int> get_lac() = 0;
       virtual std::vector<int> get_cell_id() = 0;
+      virtual std::vector<int> get_mcc() = 0;
       virtual std::vector<int> get_mnc() = 0;
       virtual std::vector<int> get_neighbours(int chan_id) = 0;
       virtual void reset() = 0;
diff --git a/lib/misc_utils/extract_system_info_impl.cc b/lib/misc_utils/extract_system_info_impl.cc
index 994c92b..0e6a4c8 100644
--- a/lib/misc_utils/extract_system_info_impl.cc
+++ b/lib/misc_utils/extract_system_info_impl.cc
@@ -74,7 +74,8 @@
             info.pwr_db = header->signal_dbm;
             info.cell_id = (msg_elements[3]<<8)+msg_elements[4];         //take cell id
             info.lac = (msg_elements[8]<<8)+msg_elements[9];             //take lac
-            info.mnc = (msg_elements[7]>>4);                             //take mnc
+            info.mcc =  ((msg_elements[5] & 0xF)  * 100) + (((msg_elements[5] & 0xF0) >> 4) * 10) + ((msg_elements[6] & 0xF)); // take mcc
+            info.mnc = (msg_elements[7] & 0xF) * 10 + (msg_elements[7]>>4); //take mnc
             boost::mutex::scoped_lock lock(extract_mutex);
             if(d_c0_channels.find(info.id) != d_c0_channels.end()){
                 d_c0_channels[info.id].copy_nonzero_elements(info);
@@ -87,8 +88,9 @@
             info.id = be16toh(header->arfcn);                            //take arfcn
             info.pwr_db = header->signal_dbm;
             info.lac = (msg_elements[6]<<8)+msg_elements[7];            //take lac
-            info.mnc = (msg_elements[5]>>4);                            //take mnc
-
+            info.mcc =  ((msg_elements[3] & 0xF) * 100) + (((msg_elements[3] & 0xF0) >> 4) * 10) + ((msg_elements[3] & 0xF)); // take mcc
+            info.mnc = (msg_elements[5] & 0xF) * 10 + (msg_elements[5]>>4); //take mnc
+            
             boost::mutex::scoped_lock lock(extract_mutex);
             if(d_c0_channels.find(info.id) != d_c0_channels.end()){
                 d_c0_channels[info.id].copy_nonzero_elements(info);
@@ -177,6 +179,15 @@
         return lacs;
     }
     
+    std::vector<int> extract_system_info_impl::get_mcc()
+    {
+        std::vector<int> mccs;
+        BOOST_FOREACH(chan_info_map::value_type &i, d_c0_channels){
+            mccs.push_back(i.second.mcc);
+        }
+        return mccs;
+    }
+    
     std::vector<int> extract_system_info_impl::get_mnc()
     {
         std::vector<int> mncs;
@@ -203,6 +214,7 @@
         }
         return pwrs;
     }
+    
     std::vector<int> extract_system_info_impl::get_neighbours(int chan_id)
     {
         std::vector<int> neighbour_cells;
diff --git a/lib/misc_utils/extract_system_info_impl.h b/lib/misc_utils/extract_system_info_impl.h
index b88a586..6c50e10 100644
--- a/lib/misc_utils/extract_system_info_impl.h
+++ b/lib/misc_utils/extract_system_info_impl.h
@@ -37,11 +37,12 @@
         unsigned int arfcn;
         unsigned int lac;
         unsigned int cell_id;
+        unsigned int mcc;
         unsigned int mnc;
         std::set<int> neighbour_cells;
         
-        chan_info() :  id(-1), pwr_db(0), arfcn(0), lac(0), cell_id(0), mnc(0){}
-        chan_info(const chan_info & info) : id(info.id), pwr_db(info.pwr_db), arfcn(info.arfcn), lac(info.lac), cell_id(info.cell_id), mnc(info.mnc){}
+        chan_info() :  id(-1), pwr_db(0), arfcn(0), lac(0), cell_id(0), mcc(0), mnc(0){}
+        chan_info(const chan_info & info) : id(info.id), pwr_db(info.pwr_db), arfcn(info.arfcn), lac(info.lac), cell_id(info.cell_id), mcc(info.mcc), mnc(info.mnc){}
         ~chan_info(){}
         void copy_nonzero_elements(const chan_info & info){
             id = info.id;
@@ -49,6 +50,7 @@
             arfcn = info.arfcn;
             lac = (info.lac!=0) ? info.lac : lac;
             cell_id = (info.cell_id!=0) ? info.cell_id : cell_id;
+            mcc = (info.mcc!=0) ? info.mcc : mcc;
             mnc = (info.mnc!=0) ? info.mnc : mnc;
         }
     };
@@ -82,6 +84,7 @@
       virtual std::vector<int> get_pwrs();
       virtual std::vector<int> get_lac();
       virtual std::vector<int> get_cell_id();
+      virtual std::vector<int> get_mcc();
       virtual std::vector<int> get_mnc();
       virtual std::vector<int> get_neighbours(int chan_id);
       virtual void reset();