btsocket: Make btsocket compatible with Python 2 and 3

Make btsocket compatible with Python 2 and 3

BUG=b:148751927
TEST=Import btsocket successfully in python3 on ChromeOS.

Change-Id: I7c14664089891e86aa7108180d11cd485efa5214
diff --git a/btsocket/btsocket.py b/btsocket/btsocket.py
index 1cec234..2c3182e 100644
--- a/btsocket/btsocket.py
+++ b/btsocket/btsocket.py
@@ -5,10 +5,10 @@
 import logging
 import socket
 
-import _btsocket
-import constants
+from . import _btsocket
+from . import constants
 
-class BluetoothSocket(socket._socketobject):
+class BluetoothSocket(socket.socket):
     """Socket wrapper class for Bluetooth sockets.
 
     Wraps the Python socket class to implement the necessary pieces to be able
diff --git a/src/btsocket.c b/src/btsocket.c
index 791eeda..03da126 100644
--- a/src/btsocket.c
+++ b/src/btsocket.c
@@ -15,6 +15,24 @@
 #include "hci.h"
 #include "sco.h"
 
+#if PY_MAJOR_VERSION < 3
+  #define MOD_ERROR_VAL
+  #define MOD_SUCCESS_VAL(val)
+  #define MOD_INIT(name) void init##name(void)
+  #define MOD_DEF(ob, name, doc, methods) \
+          ob = Py_InitModule3(name, methods, doc);
+#else
+  #define PyInt_AS_LONG PyLong_AS_LONG
+  #define PyInt_Check PyLong_Check
+  #define MOD_ERROR_VAL NULL
+  #define MOD_SUCCESS_VAL(val) val
+  #define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void)
+  #define MOD_DEF(ob, name, doc, methods) \
+          static struct PyModuleDef moduledef = { \
+            PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \
+          ob = PyModule_Create(&moduledef);
+#endif
+
 static PyObject *_btsocket_error;
 static PyObject *_btsocket_timeout;
 
@@ -36,7 +54,7 @@
   if (!PyInt_Check(fileno_object))
     return -1;
 
-  /* PyInts are longer than your average int, truncate back to an int */
+  /* PyInt are longer than your average int, truncate back to an int */
   fileno = PyInt_AS_LONG(fileno_object);
   Py_DECREF(fileno_object);
   return (int)fileno;
@@ -486,14 +504,13 @@
   { NULL, NULL, 0, NULL }
 };
 
-PyMODINIT_FUNC
-init_btsocket(void)
+MOD_INIT(_btsocket)
 {
   PyObject *m;
 
-  m = Py_InitModule("_btsocket", _btsocket_methods);
+  MOD_DEF(m, "_btsocket", "Bluetooth socket API", _btsocket_methods);
   if (!m)
-    return;
+    return MOD_ERROR_VAL;
 
   _btsocket_error = PyErr_NewException("btsocket.error",
                                        PyExc_OSError, NULL);
@@ -504,4 +521,6 @@
                                          PyExc_OSError, NULL);
   Py_INCREF(_btsocket_timeout);
   PyModule_AddObject(m, "timeout", _btsocket_timeout);
+
+  return MOD_SUCCESS_VAL(m);
 }