| | 567 | |
|---|
| | 568 | return 0; |
|---|
| | 569 | } |
|---|
| | 570 | #endif |
|---|
| | 571 | |
|---|
| | 572 | static int |
|---|
| | 573 | read_cmml_stream (CMML * cmml, const CMML_Stream * stream, void * user_data) |
|---|
| | 574 | { |
|---|
| | 575 | request_rec * r = (request_rec *)user_data; |
|---|
| | 576 | CMML_Preamble * preamble; |
|---|
| | 577 | static char buf[1024]; |
|---|
| | 578 | int n; |
|---|
| | 579 | |
|---|
| | 580 | preamble = cmml_get_preamble (cmml); |
|---|
| | 581 | n = cmml_preamble_snprint (buf, 1024, preamble); |
|---|
| | 582 | if (n > 0) { |
|---|
| | 583 | ap_rwrite (buf, n, r); |
|---|
| | 584 | } |
|---|
| | 585 | |
|---|
| | 586 | return 0; |
|---|
| | 587 | } |
|---|
| | 588 | |
|---|
| | 589 | static int |
|---|
| | 590 | read_cmml_head (CMML * cmml, const CMML_Head * head, void * user_data) |
|---|
| | 591 | { |
|---|
| | 592 | request_rec * r = (request_rec *)user_data; |
|---|
| | 593 | static char buf[MAX_CLIP_LEN]; |
|---|
| | 594 | int n; |
|---|
| | 595 | |
|---|
| | 596 | n = cmml_head_pretty_snprint (buf, MAX_CLIP_LEN, (CMML_Head *)head); |
|---|
| | 597 | if (n > 0) { |
|---|
| | 598 | ap_rwrite (buf, n, r); |
|---|
| | 599 | } |
|---|
| | 600 | |
|---|
| | 601 | return 0; |
|---|
| | 602 | } |
|---|
| | 603 | |
|---|
| | 604 | static int |
|---|
| | 605 | read_cmml_clip (CMML * cmml, const CMML_Clip * clip, void * user_data) |
|---|
| | 606 | { |
|---|
| | 607 | request_rec * r = (request_rec *)user_data; |
|---|
| | 608 | static char buf[MAX_CLIP_LEN]; |
|---|
| | 609 | int n; |
|---|
| | 610 | |
|---|
| | 611 | n = cmml_clip_pretty_snprint (buf, MAX_CLIP_LEN, (CMML_Clip *)clip); |
|---|
| | 612 | if (n > 0) { |
|---|
| | 613 | ap_rwrite (buf, n, r); |
|---|
| | 614 | } |
|---|
| | 615 | |
|---|
| | 616 | return 0; |
|---|
| | 617 | } |
|---|
| | 618 | |
|---|
| | 619 | static int |
|---|
| | 620 | ma_send_cmml (request_rec * r, char * filename) |
|---|
| | 621 | { |
|---|
| | 622 | CMML * doc; |
|---|
| | 623 | size_t nread = 0; |
|---|
| | 624 | long n; |
|---|
| | 625 | static char * cmml_tail = "</cmml>\n"; |
|---|
| | 626 | |
|---|
| | 627 | doc = cmml_open (filename); |
|---|
| | 628 | cmml_set_read_callbacks (doc, read_cmml_stream, read_cmml_head, |
|---|
| | 629 | read_cmml_clip, r); |
|---|
| | 630 | |
|---|
| | 631 | while ((n = cmml_read (doc, 1024)) > 0) nread += n; |
|---|
| | 632 | |
|---|
| | 633 | if (n < 0) { |
|---|
| | 634 | /* ERROR */ |
|---|
| | 635 | } |
|---|
| | 636 | |
|---|
| | 637 | n = strlen (cmml_tail); |
|---|
| | 638 | if (n > 0) { |
|---|
| | 639 | ap_rwrite (cmml_tail, n, r); |
|---|
| | 640 | } |
|---|
| | 641 | |
|---|
| | 642 | cmml_destroy (doc); |
|---|