Просмотр исходного кода

Add some comments to mod_lua.inl

bel 11 лет назад
Родитель
Сommit
b7afc04864
1 измененных файлов с 50 добавлено и 40 удалено
  1. 50 40
      src/mod_lua.inl

+ 50 - 40
src/mod_lua.inl

@@ -187,21 +187,21 @@ static const char * lsp_var_reader(lua_State *L, void *ud, size_t *sz)
     const char * ret;
 
     switch (reader->state) {
-        case 0:
-            ret = "mg.write(";
-            *sz = strlen(ret);
-            break;
-        case 1:
-            ret = reader->begin;
-            *sz = reader->len;
-            break;
-        case 2:
-            ret = ")";
-            *sz = strlen(ret);
-            break;
-        default:
-            ret = 0;
-            *sz = 0;
+    case 0:
+        ret = "mg.write(";
+        *sz = strlen(ret);
+        break;
+    case 1:
+        ret = reader->begin;
+        *sz = reader->len;
+        break;
+    case 2:
+        ret = ")";
+        *sz = strlen(ret);
+        break;
+    default:
+        ret = 0;
+        *sz = 0;
     }
 
     reader->state++;
@@ -219,6 +219,7 @@ static int lsp(struct mg_connection *conn, const char *path,
         if (p[i] == '\n') lines++;
         if ((i + 1) < len && p[i] == '<' && p[i + 1] == '?') {
 
+            /* <?= ?> means a variable is enclosed and its value should be printed */
             is_var = ((i + 2) < len && p[i + 2] == '=');
 
             if (is_var) j = i + 2;
@@ -404,7 +405,10 @@ static void prepare_lua_environment(struct mg_connection *conn, lua_State *L, co
     lua_pop(L, 1);
     lua_register(L, "connect", lsp_connect);
 
-    if (conn == NULL) return;
+    if (conn == NULL) {
+        /* Do not register any connection specific functions or variables */
+        return;
+    }
 
     /* Register mg module */
     lua_newtable(L);
@@ -593,27 +597,27 @@ struct lua_websock_data {
 static void websock_cry(struct mg_connection *conn, int err, lua_State * L, const char * ws_operation, const char * lua_operation)
 {
     switch (err) {
-    case LUA_OK:
-    case LUA_YIELD:
-        break;
-    case LUA_ERRRUN:
-        mg_cry(conn, "%s: %s failed: runtime error: %s", ws_operation, lua_operation, lua_tostring(L, -1));
-        break;
-    case LUA_ERRSYNTAX:
-        mg_cry(conn, "%s: %s failed: syntax error: %s", ws_operation, lua_operation, lua_tostring(L, -1));
-        break;
-    case LUA_ERRMEM:
-        mg_cry(conn, "%s: %s failed: out of memory", ws_operation, lua_operation);
-        break;
-    case LUA_ERRGCMM:
-        mg_cry(conn, "%s: %s failed: error during garbage collection", ws_operation, lua_operation);
-        break;
-    case LUA_ERRERR:
-        mg_cry(conn, "%s: %s failed: error in error handling: %s", ws_operation, lua_operation, lua_tostring(L, -1));
-        break;
-    default:
-        mg_cry(conn, "%s: %s failed: error %i", ws_operation, lua_operation, err);
-        break;
+        case LUA_OK:
+        case LUA_YIELD:
+            break;
+        case LUA_ERRRUN:
+            mg_cry(conn, "%s: %s failed: runtime error: %s", ws_operation, lua_operation, lua_tostring(L, -1));
+            break;
+        case LUA_ERRSYNTAX:
+            mg_cry(conn, "%s: %s failed: syntax error: %s", ws_operation, lua_operation, lua_tostring(L, -1));
+            break;
+        case LUA_ERRMEM:
+            mg_cry(conn, "%s: %s failed: out of memory", ws_operation, lua_operation);
+            break;
+        case LUA_ERRGCMM:
+            mg_cry(conn, "%s: %s failed: error during garbage collection", ws_operation, lua_operation);
+            break;
+        case LUA_ERRERR:
+            mg_cry(conn, "%s: %s failed: error in error handling: %s", ws_operation, lua_operation, lua_tostring(L, -1));
+            break;
+        default:
+            mg_cry(conn, "%s: %s failed: error %i", ws_operation, lua_operation, err);
+            break;
     }
 }
 
@@ -657,6 +661,8 @@ static void * new_lua_websocket(const char * script, struct mg_connection *conn)
             free(lws_data);
             lws_data=0;
         }
+    } else {
+        mg_cry(conn, "%s: out of memory", __func__);
     }
 
     return lws_data;
@@ -674,8 +680,11 @@ static int lua_websocket_data(struct mg_connection *conn, int bits, char *data,
 
     do {
         retry=0;
+
+        /* Push the data to Lua, then resume the Lua state. */
+        /* The data will be available to Lua as the result of the coroutine.yield function. */
         lua_pushboolean(lws_data->thread, 1);
-        if (bits > 0) {
+        if (bits >= 0) {
             lua_pushinteger(lws_data->thread, bits);
             if (data) {
                 lua_pushlstring(lws_data->thread, data, data_len);
@@ -687,6 +696,7 @@ static int lua_websocket_data(struct mg_connection *conn, int bits, char *data,
             err = lua_resume(lws_data->thread, NULL, 1);
         }
 
+        /* Check if Lua returned by a call to the coroutine.yield function. */
         if (err!=LUA_YIELD) {
             websock_cry(conn, err, lws_data->thread, __func__, "lua_resume");
         } else {
@@ -697,7 +707,7 @@ static int lua_websocket_data(struct mg_connection *conn, int bits, char *data,
                 fd_set rfds;
                 struct timeval tv;
 
-                FD_ZERO(&rfds);
+                FD_ZERO(&rfds);
                 FD_SET(conn->client.sock, &rfds);
 
                 tv.tv_sec = (unsigned long)delay;
@@ -731,4 +741,4 @@ static void lua_websocket_close(struct mg_connection *conn)
     free(lws_data);
     conn->lua_websocket_state = NULL;
 }
-#endif
+#endif