~spuul/nginx/trunk

« back to all changes in this revision

Viewing changes to debian/modules/nginx-lua/src/ngx_http_lua_socket_udp.c

  • Committer: Package Import Robot
  • Author(s): Colin Watson
  • Date: 2014-02-15 03:05:42 UTC
  • mfrom: (4.3.10 sid)
  • Revision ID: package-import@ubuntu.com-20140215030542-71ubtowl24vf7nfn
Tags: 1.4.5-1ubuntu1
* Resynchronise with Debian (LP: #1280511).  Remaining changes:
  - debian/patches/ubuntu-branding.patch:
    + Add Ubuntu branding to server_tokens.

Show diffs side-by-side

added added

removed removed

Lines of Context:
118
118
                          lua_gettop(L));
119
119
    }
120
120
 
121
 
    lua_pushlightuserdata(L, &ngx_http_lua_request_key);
122
 
    lua_rawget(L, LUA_GLOBALSINDEX);
123
 
    r = lua_touserdata(L, -1);
124
 
    lua_pop(L, 1);
125
 
 
 
121
    r = ngx_http_lua_get_req(L);
126
122
    if (r == NULL) {
127
123
        return luaL_error(L, "no request found");
128
124
    }
182
178
                          "arguments (including the object), but seen %d", n);
183
179
    }
184
180
 
185
 
    lua_pushlightuserdata(L, &ngx_http_lua_request_key);
186
 
    lua_rawget(L, LUA_GLOBALSINDEX);
187
 
    r = lua_touserdata(L, -1);
188
 
    lua_pop(L, 1);
189
 
 
 
181
    r = ngx_http_lua_get_req(L);
190
182
    if (r == NULL) {
191
183
        return luaL_error(L, "no request found");
192
184
    }
293
285
 
294
286
    url.url.len = host.len;
295
287
    url.url.data = host.data;
296
 
    url.default_port = port;
 
288
    url.default_port = (in_port_t) port;
297
289
    url.no_resolve = 1;
298
290
 
299
291
    if (ngx_parse_url(r->pool, &url) != NGX_OK) {
357
349
    }
358
350
 
359
351
    rctx->name = host;
 
352
#if !defined(nginx_version) || nginx_version < 1005008
360
353
    rctx->type = NGX_RESOLVE_A;
 
354
#endif
361
355
    rctx->handler = ngx_http_lua_socket_resolve_handler;
362
356
    rctx->data = u;
363
357
    rctx->timeout = clcf->resolver_timeout;
424
418
    ngx_http_lua_socket_udp_upstream_t  *u;
425
419
    u_char                              *p;
426
420
    size_t                               len;
 
421
#if defined(nginx_version) && nginx_version >= 1005008
 
422
    socklen_t                            socklen;
 
423
    struct sockaddr                     *sockaddr;
 
424
#else
427
425
    struct sockaddr_in                  *sin;
 
426
#endif
428
427
    ngx_uint_t                           i;
429
428
    unsigned                             waiting;
430
429
 
484
483
 
485
484
#if (NGX_DEBUG)
486
485
    {
 
486
#   if defined(nginx_version) && nginx_version >= 1005008
 
487
    u_char      text[NGX_SOCKADDR_STRLEN];
 
488
    ngx_str_t   addr;
 
489
#   else
487
490
    in_addr_t   addr;
 
491
#   endif
488
492
    ngx_uint_t  i;
489
493
 
 
494
#   if defined(nginx_version) && nginx_version >= 1005008
 
495
    addr.data = text;
 
496
 
 
497
    for (i = 0; i < ctx->naddrs; i++) {
 
498
        addr.len = ngx_sock_ntop(ur->addrs[i].sockaddr, ur->addrs[i].socklen,
 
499
                                 text, NGX_SOCKADDR_STRLEN, 0);
 
500
 
 
501
        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
 
502
                       "name was resolved to %V", &addr);
 
503
    }
 
504
#   else
490
505
    for (i = 0; i < ctx->naddrs; i++) {
491
506
        dd("addr i: %d %p", (int) i,  &ctx->addrs[i]);
492
507
 
497
512
                       (addr >> 24) & 0xff, (addr >> 16) & 0xff,
498
513
                       (addr >> 8) & 0xff, addr & 0xff);
499
514
    }
 
515
#   endif
500
516
    }
501
517
#endif
502
518
 
523
539
 
524
540
    dd("selected addr index: %d", (int) i);
525
541
 
 
542
#if defined(nginx_version) && nginx_version >= 1005008
 
543
    socklen = ur->addrs[i].socklen;
 
544
 
 
545
    sockaddr = ngx_palloc(r->pool, socklen);
 
546
    if (sockaddr == NULL) {
 
547
        goto nomem;
 
548
    }
 
549
 
 
550
    ngx_memcpy(sockaddr, ur->addrs[i].sockaddr, socklen);
 
551
 
 
552
    switch (sockaddr->sa_family) {
 
553
#if (NGX_HAVE_INET6)
 
554
    case AF_INET6:
 
555
        ((struct sockaddr_in6 *) sockaddr)->sin6_port = htons(ur->port);
 
556
        break;
 
557
#endif
 
558
    default: /* AF_INET */
 
559
        ((struct sockaddr_in *) sockaddr)->sin_port = htons(ur->port);
 
560
    }
 
561
 
 
562
    p = ngx_pnalloc(r->pool, NGX_SOCKADDR_STRLEN);
 
563
    if (p == NULL) {
 
564
        goto nomem;
 
565
    }
 
566
 
 
567
    len = ngx_sock_ntop(sockaddr, socklen, p, NGX_SOCKADDR_STRLEN, 1);
 
568
    ur->sockaddr = sockaddr;
 
569
    ur->socklen = socklen;
 
570
 
 
571
#else
 
572
    /* for nginx older than 1.5.8 */
 
573
 
526
574
    len = NGX_INET_ADDRSTRLEN + sizeof(":65536") - 1;
527
575
 
528
576
    p = ngx_pnalloc(r->pool, len + sizeof(struct sockaddr_in));
529
577
    if (p == NULL) {
530
 
        ngx_resolve_name_done(ctx);
531
 
        u->ft_type |= NGX_HTTP_LUA_SOCKET_FT_RESOLVER;
532
 
 
533
 
        lua_pushnil(L);
534
 
        lua_pushliteral(L, "out of memory");
535
 
 
536
 
        if (waiting) {
537
 
            ngx_http_run_posted_requests(c);
538
 
        }
539
 
 
540
 
        return;
 
578
        goto nomem;
541
579
    }
542
580
 
543
581
    sin = (struct sockaddr_in *) &p[len];
552
590
 
553
591
    ur->sockaddr = (struct sockaddr *) sin;
554
592
    ur->socklen = sizeof(struct sockaddr_in);
 
593
#endif
555
594
 
556
595
    ur->host.data = p;
557
596
    ur->host.len = len;
571
610
    } else {
572
611
        (void) ngx_http_lua_socket_resolve_retval_handler(r, u, L);
573
612
    }
 
613
 
 
614
    return;
 
615
 
 
616
nomem:
 
617
 
 
618
    ngx_resolve_name_done(ctx);
 
619
    u->ft_type |= NGX_HTTP_LUA_SOCKET_FT_NOMEM;
 
620
 
 
621
    lua_pushnil(L);
 
622
    lua_pushliteral(L, "no memory");
 
623
 
 
624
    if (waiting) {
 
625
        ngx_http_run_posted_requests(c);
 
626
    }
574
627
}
575
628
 
576
629
 
733
786
                          "but got %d", lua_gettop(L));
734
787
    }
735
788
 
736
 
    lua_pushlightuserdata(L, &ngx_http_lua_request_key);
737
 
    lua_rawget(L, LUA_GLOBALSINDEX);
738
 
    r = lua_touserdata(L, -1);
739
 
    lua_pop(L, 1);
740
 
 
 
789
    r = ngx_http_lua_get_req(L);
741
790
    if (r == NULL) {
742
791
        return luaL_error(L, "request object not found");
743
792
    }
861
910
                          "(including the object), but got %d", nargs);
862
911
    }
863
912
 
864
 
    lua_pushlightuserdata(L, &ngx_http_lua_request_key);
865
 
    lua_rawget(L, LUA_GLOBALSINDEX);
866
 
    r = lua_touserdata(L, -1);
867
 
    lua_pop(L, 1);
 
913
    r = ngx_http_lua_get_req(L);
 
914
    if (r == NULL) {
 
915
        return luaL_error(L, "no request found");
 
916
    }
868
917
 
869
918
    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
870
919
                   "lua udp socket calling receive() method");
1413
1462
                          "(including the object) but seen %d", lua_gettop(L));
1414
1463
    }
1415
1464
 
1416
 
    lua_pushlightuserdata(L, &ngx_http_lua_request_key);
1417
 
    lua_rawget(L, LUA_GLOBALSINDEX);
1418
 
    r = lua_touserdata(L, -1);
1419
 
    lua_pop(L, 1);
 
1465
    r = ngx_http_lua_get_req(L);
 
1466
    if (r == NULL) {
 
1467
        return luaL_error(L, "no request found");
 
1468
    }
1420
1469
 
1421
1470
    luaL_checktype(L, 1, LUA_TTABLE);
1422
1471
 
1447
1496
ngx_http_lua_socket_udp_resume(ngx_http_request_t *r)
1448
1497
{
1449
1498
    int                          nret;
 
1499
    lua_State                   *vm;
1450
1500
    ngx_int_t                    rc;
1451
1501
    ngx_connection_t            *c;
1452
1502
    ngx_http_lua_ctx_t          *ctx;
1453
1503
    ngx_http_lua_co_ctx_t       *coctx;
1454
 
    ngx_http_lua_main_conf_t    *lmcf;
1455
1504
 
1456
1505
    ngx_http_lua_socket_udp_upstream_t      *u;
1457
1506
 
1462
1511
 
1463
1512
    ctx->resume_handler = ngx_http_lua_wev_handler;
1464
1513
 
1465
 
    lmcf = ngx_http_get_module_main_conf(r, ngx_http_lua_module);
1466
 
 
1467
1514
    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1468
1515
                   "lua udp operation done, resuming lua thread");
1469
1516
 
1485
1532
    }
1486
1533
 
1487
1534
    c = r->connection;
 
1535
    vm = ngx_http_lua_get_lua_vm(r, ctx);
1488
1536
 
1489
 
    rc = ngx_http_lua_run_thread(lmcf->lua, r, ctx, nret);
 
1537
    rc = ngx_http_lua_run_thread(vm, r, ctx, nret);
1490
1538
 
1491
1539
    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1492
1540
                   "lua run thread returned %d", rc);
1493
1541
 
1494
1542
    if (rc == NGX_AGAIN) {
1495
 
        return ngx_http_lua_run_posted_threads(c, lmcf->lua, r, ctx);
 
1543
        return ngx_http_lua_run_posted_threads(c, vm, r, ctx);
1496
1544
    }
1497
1545
 
1498
1546
    if (rc == NGX_DONE) {
1499
1547
        ngx_http_lua_finalize_request(r, NGX_DONE);
1500
 
        return ngx_http_lua_run_posted_threads(c, lmcf->lua, r, ctx);
 
1548
        return ngx_http_lua_run_posted_threads(c, vm, r, ctx);
1501
1549
    }
1502
1550
 
1503
1551
    if (ctx->entered_content_phase) {