@@ -465,7 +465,10 @@ func getRequestValue(f filters.FilterContext) func(*lua.LState) int {
465
465
switch key {
466
466
case "header" :
467
467
if header == nil {
468
- header = s .CreateTable (0 , 0 )
468
+ header = s .CreateTable (0 , 2 )
469
+ header .RawSetString ("add" , s .NewFunction (addRequestHeader (f )))
470
+ header .RawSetString ("values" , s .NewFunction (requestHeaderValues (f )))
471
+
469
472
mt := s .CreateTable (0 , 3 )
470
473
mt .RawSetString ("__index" , s .NewFunction (getRequestHeader (f )))
471
474
mt .RawSetString ("__newindex" , s .NewFunction (setRequestHeader (f )))
@@ -556,7 +559,10 @@ func getResponseValue(f filters.FilterContext) func(*lua.LState) int {
556
559
switch key {
557
560
case "header" :
558
561
if header == nil {
559
- header = s .CreateTable (0 , 0 )
562
+ header = s .CreateTable (0 , 2 )
563
+ header .RawSetString ("add" , s .NewFunction (addResponseHeader (f )))
564
+ header .RawSetString ("values" , s .NewFunction (responseHeaderValues (f )))
565
+
560
566
mt := s .CreateTable (0 , 3 )
561
567
mt .RawSetString ("__index" , s .NewFunction (getResponseHeader (f )))
562
568
mt .RawSetString ("__newindex" , s .NewFunction (setResponseHeader (f )))
@@ -677,6 +683,30 @@ func setRequestHeader(f filters.FilterContext) func(*lua.LState) int {
677
683
}
678
684
}
679
685
686
+ func addRequestHeader (f filters.FilterContext ) func (* lua.LState ) int {
687
+ return func (s * lua.LState ) int {
688
+ value := s .ToString (- 1 )
689
+ name := s .ToString (- 2 )
690
+ if name != "" && value != "" {
691
+ f .Request ().Header .Add (name , value )
692
+ }
693
+ return 0
694
+ }
695
+ }
696
+
697
+ func requestHeaderValues (f filters.FilterContext ) func (* lua.LState ) int {
698
+ return func (s * lua.LState ) int {
699
+ name := s .ToString (- 1 )
700
+ values := f .Request ().Header .Values (name )
701
+ res := s .CreateTable (len (values ), 0 )
702
+ for _ , v := range values {
703
+ res .Append (lua .LString (v ))
704
+ }
705
+ s .Push (res )
706
+ return 1
707
+ }
708
+ }
709
+
680
710
func iterateRequestHeader (f filters.FilterContext ) func (* lua.LState ) int {
681
711
// https://www.lua.org/pil/7.2.html
682
712
return func (s * lua.LState ) int {
@@ -755,6 +785,30 @@ func setResponseHeader(f filters.FilterContext) func(*lua.LState) int {
755
785
}
756
786
}
757
787
788
+ func addResponseHeader (f filters.FilterContext ) func (* lua.LState ) int {
789
+ return func (s * lua.LState ) int {
790
+ value := s .ToString (- 1 )
791
+ name := s .ToString (- 2 )
792
+ if name != "" && value != "" {
793
+ f .Response ().Header .Add (name , value )
794
+ }
795
+ return 0
796
+ }
797
+ }
798
+
799
+ func responseHeaderValues (f filters.FilterContext ) func (* lua.LState ) int {
800
+ return func (s * lua.LState ) int {
801
+ name := s .ToString (- 1 )
802
+ values := f .Response ().Header .Values (name )
803
+ res := s .CreateTable (len (values ), 0 )
804
+ for _ , v := range values {
805
+ res .Append (lua .LString (v ))
806
+ }
807
+ s .Push (res )
808
+ return 1
809
+ }
810
+ }
811
+
758
812
func iterateResponseHeader (f filters.FilterContext ) func (* lua.LState ) int {
759
813
return func (s * lua.LState ) int {
760
814
s .Push (s .NewFunction (nextHeader (f .Response ().Header )))
0 commit comments